美文网首页
SAS冷知识

SAS冷知识

作者: 生物统计与SAS研究员 | 来源:发表于2021-03-02 13:25 被阅读0次

一、option center

所有的输出表格可以用option center;或option nocenter;控制,如果是center,则输出结果居中,否则靠左。

option center;效果

option nocenter;效果

二、有关文字编码的冷知识

1、unicode和unicodec函数可以用来解码

2、btye

3、可以获取文字中的中文,compress(compress(s,,'n'),,'kl')。其中“l”意思是小写字母和中文,“n”表示大小写的英文字母和下划线。

三、关于proc report

define中的group,一定要配合聚合的统计量使用。如果没有会出一段黑字。我们可以用order替换掉group就不会有这个问题了。

四、Hash连表选取所有变量

一般来讲,hash方法在data步中,变量是无法在编译阶段识别的。所以必须在代码中让相关变量出现在代码中,以及确定变量长度。如下例:

length QNAM QVAL $200.;

if _n_=1 then do;

declare hash dvh(dataset:'XX');

dvh.definekey('SUBJID');

dvh.definedata('QNAM','QVAL');

dvh.definedone();

call missing(QVAL,QNAM);

end;

但是,有的时候一个一个的选入变量会比较痛苦,于是有了如下办法:

if _n_=1 then do;

if 0 then set XX;

declare hash dvh(dataset:'XX');

dvh.definekey('SUBJID');

dvh.definedata(all:'y');

dvh.definedone();

end;

先在代码中使用set语句,从而直接确定选入的变量名和长度,然后通过一个虚假的if语句,使得set语句在事实上不可能执行。这样就省掉了确定变量及其长的length语句,和防止NOTE的call missing。这样做的好处是不必一个一个的去设定变量,坏处是:

1、被set的数据集中所有的变量都会被导入到data步中,有时可能会发生意想不到的覆盖或bug

2、这样做连接进入的变量是retain的。

五、array语句可以定义临时数组_TEMPORARY_。无论是临时的还是定义好的,只要在array语句规定变量值,那么他是retain的,但如果不规定,即使是新建变量也不是retain的。array语句是在PDV阶段前执行的。

六、当是用put进行字符到字符的转换时,输入变量类型错误是会导致报错的。

七、当两个数据集set到一起的时候,相同名字的变量可能长度不同,这会导致后面的数据截断。尤其是两个数据集是excel导入的时候要注意。

八、比较符号=:

该符号可以比较其中一个比另一个长,而且前半部分相等的字符串。例如:a=‘1234’,b=‘12345’。此时a=b是不成立的,但是a=:b是成立的。

九、dosubl函数

可以直接执行SAS的代码,它不是放在宏编译器里执行宏语句,而是直接中断当前的程序,先讲代码作为普通程序执行。个人理解是中断当前的程序,另外开一个input stacker单跑普通程序。

宏里的示例:

%let rc = %sysfunc(dosubl(proc print data=sashelp.class;run;));

具体情况有待研究。。。。

相关文章

网友评论

      本文标题:SAS冷知识

      本文链接:https://www.haomeiwen.com/subject/asgtqltx.html