我正在使用以下代码对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
(我已经尝试过了)。
到底有没有?
答案 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相关的输出。