SAS压制.lst文件但保留ODS输出

时间:2017-07-01 02:40:20

标签: sas

我正在使用以下代码对SAS进行PCA分析:

ods output Eigenvectors=PRINCEEV Eigenvalues=PRINCEEVAL;
proc princomp data=REPLACED PLOTS=SCORE(ELLIPSE NCOMP=5) NOPRINT;
    id time; 
run;
ods output close;

由于此分析产生的第一个文件太大,我使用了NOPRINT选项。但是,似乎NOPRINT选项也消除了我的所有ODS输出。 (现在PRINCEEV和PRINCEEVAL都是空的):

ERROR: File WORK.PRINCEEVAL.DATA does not exist.
ERROR: Export unsuccessful.  See SAS Log for details.
259                                                                         putn

_______
                                                                            1
259      ! ame=YES;   run;
WARNING 1-322: Assuming the symbol PUTNAMES was misspelled as putname.

ERROR: File WORK.PRINCEEV.DATA does not exist.
ERROR: Export unsuccessful.  See SAS Log for details.
ERROR: Errors printed on page 1.

有没有办法抑制lst文件的生成,而不影响ods输出?

更新:

根据following sas blog,似乎无法做到这一点:

  

你能结合NOPRINT和ODS OUTPUT吗?

     

SAS程序员渴望效率。在阅读NOPRINT选项后   这个雄心勃勃的程序员可能会让程序运行得更快   尝试使用NOPRINT选项运行过程但使用ODS   OUTPUT语句捕获一个表的结果。对不起朋友,   但你不能这样做。 NOPRINT选项意味着没有ODS表   已创建,因此无法选择表并将其保存到数据中   集。

但困境是,我在云计算服务器上的空间有限。 lst文件除了浪费我的空间外什么都不做。当SAS程序与外部进程一起运行时删除lst文件也会在SAS中生成io error(我已经尝试过了)。

到底有没有?

3 个答案:

答案 0 :(得分:4)

我建议:

ods listing close ;

ods output Eigenvectors=PRINCEEV Eigenvalues=PRINCEEVAL;
proc princomp data=REPLACED PLOTS=SCORE(ELLIPSE NCOMP=5) NOPRINT;
    id time; 
run;
ods output close;

这将关闭列表目的地,因此应该可以正常工作。

我在一篇相关的博文中注意到,里克主张:

ods exclude _all_ ;

http://blogs.sas.com/content/iml/2015/05/28/five-reasons-ods-exclude.html

答案 1 :(得分:0)

对上一个答案进行较小的更改:删除NOPRINT选项,并在创建ODS OUTPUT之后打开ods列表(如果您还有其他代码)。

ods listing close ;
ods output Eigenvectors=PRINCEEV Eigenvalues=PRINCEEVAL;
proc princomp data=REPLACED PLOTS=SCORE(ELLIPSE NCOMP=5) /*NOPRINT*/;
    id time; 
run;
ods output close;
ODS LISTING;

答案 2 :(得分:0)

如果您通过bash在云计算服务器上执行sas脚本,则可以将.lst文件发送到/dev/null

sas -print /dev/null script.sas

-print选项仅影响您的.lst,而不影响任何与ODS相关的输出。