286:画图时可能出现的问题
在我们工作的过程中,如果严格执行一些流程,一般是很少会犯错的。但是总会遇到一些同事喜欢创造问题,尤其是在项目紧急的时候真的很糟心。
比如出TFL的时候严格按照这样的模式:
ods listing close;
ods rtf;
ods rtf close;
ods listing;
我遇到了不按照这种格式出TFL出现问题的,SAS真的会报一些“莫名其妙”的问题,其实这都是不遵守SAS的运行机制,类似的问题在工作中能遇到不少,
但是也不是说这样就什么都不是,空闲的时候研究这些问题,说不定能够让我们对SAS有更深的理解。重要的是在平时做项目的时候还是老老实实按部就班的编程;或者出现问题的时候能够知道错在哪,然后立马解决掉,重要的不是出现问题,而是快速高质量地解决问题的能力。
下面汇总了一些画图时可能出现的问题。
一:
C:\sasconfig\config\这样路径无法
对于C:\sasconfig\config\这样路径无法写入的解决方法参考:https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/graphref/n014ro62pa3xu0n165t2qpffbmiv.htm
在画图的时候会默认生成一些文件,因为把安装sas oa的时候不是默认的路径,用户的默认路径也改到D盘了,服务器的权限更加严格,导致无法写入到图中的目录。所以代码里要求更严格,手动指定输出路径,省事的话可以加上:ods _all_ close;
二:
WARNING: ODS graphics must be enabled to obtain the full features of the PLOTS= option.
以前在自己测试的时候,发现result窗口输出的图形很模糊,这是最开始的程序
下面是程序对应的输出,可以看到删失的那些点很模糊
但是我加上ods graphics on之后,图形变得很清晰,养成好的习惯,打开graphics之后,记得关闭,也就是odsgraphics off.
WARNING: Output 'survivalplot' was not created. Make sure that the output object name, label, or path is spelled correctly. Also, verify that the
appropriate procedure options are used to produce the requested output object. For example, verify that the NOPRINT option is not used.
上面这个报错也是要加上ods graphics on;才能正确ods output相应的数据集。
刚用SAS BASE试了一下,并没有出现上面的这些问题,上面的这些问题应该是我用SASEG的时候碰到了,所以如果你也出现了上面的问题,可以试试这些解决方法。
三:
有时候我们画图的时候,可能需要筛选对应的组别或者某些值作为宏变量,然后在宏里面创建宏变量,接着输出到图里面,比如下面这样
ods listing close;
od rtf file="";
%macro sur(subconi=);
proc sql ;
select count(distinct subjid) into: count from final
where &subconi;
quit;
proc template;
run;
proc sgrender data=final template=spyder;
where &coni;
run;
%mend;
%sur(subconi=XXXX);
%sur(subconi=XXXX);
ods rtf close;
ods listing;
然后发现输出很奇怪,第一页会出现一些值(这个就是那个宏变量的值)
然后第二页才是图
而问题就出现在proc sql,因为没有加上noprint,大家有时候用proc sql计算一些东西,比如计算人数的时候,都会在result窗口输出对应的结果,当你放在ods listing里面的时候,比如上面的宏变量,相当于把这个result也输出到图里面了,所以大家一定要记得加上noprint,平时写table的话,用proc sql也可以加上noprint。
上面就是大家工作中可能遇到的问题。