1.PROC PRINT
使用proc print 可以创建列表,proc print 还可以使用SUM variables对某列数据求和,
proc print data= noobs split="*" label ; noobs(不输出OBS列)
where conditions;(根据条件挑选行数,只支持一个where语句)
by variables notsorted;(这个subsetting,根据BY变量取数据集子集)
var variables;(挑选listing的变量)
id variables;(代替OBS 列)
sum variables ;对数值列求和
notsorted选项不要求数据集按照by语句的变量名提前用proc sort排序,但是如果同一个组 却在数据集内不连续,proc print 会分开取子集,而不会放于同一个子集中;
split="*" 表示将标签里面的内容按*分行,如果存在*的话,*也可以替换成其他用户自定义的字符;
label表示在输出界面显示标签
如果ID 不与BY 连用,BY 语句的变量及值会作为标题:
如果ID 与BY 语句联用,BY语句的变量作为第1列,值在会首次出现时显示
proc print data=sashelp.class;
where age>13;
var name age height weight;
by sex;
id sex;
sum age;
run;
2. WHERE 语句
where 语句可以对数值型变量或者字符型变量进行挑选,比较的逻辑字符如下:
= or eq,等于
^= or ne ,不等于
> or gt , 大于
< or lt,小于
>= or ge,大于或等于
<= or le ,小于或等于
contain or ? , 包含
多个复合语句可以用and或者& 表示并集,or 或者|表示交集,有些时候对于同一个变量取交集可以使用in (level1,leve2,.....)更方便:
where actlevel ="low" or actlevel="mod"; where actlevel in ("low","mod")等价
where fee=124.80 or fee=178.20 ;where fee in (124.80,178.20) 等价
还可以对于and 或者or使用的条件用括号括起来,SAS会先执行括号内的逻辑:
where (age<=55 and pulse>75) or area="A";
where age<=55 and (pulse >75 or area="A");
3. titles和footnotes
每个PROC步中,在titles和footnotes语句中可以添加最多10个titles或footnotes。如:
title <n> "text" ; footnote <n> "text" ;
如果title或者footnote后面没有加数字,则默认title=title1,footnote=footnote1;
title和footnote是全局变量,因此一旦设置生成会一直保留,除非设置新的title和footnote,新的title<n> 和footnote<n>会覆盖title<n>和footnote<n>及以上的所有title和footnote;
比如title2会覆盖已有的title2且清空title3-title10如果存在的话
使用title和footnote可以直接清空所有的title和footnote
4.format 语句
以下是SAS常用的格式,我们使用FORMAT的格式时需要保证宽度w覆盖数据最长的宽度
Format | 定义 | 格式举例 |
w | 四舍五入至w宽度最近整数 | 7. |
w.d | 四舍五入至w宽度d个小数位数(w宽度包含小数) | 8.2 |
COMMAw.d | 四舍五入至w宽度d个小数位数(w宽度包含小数和逗号),以逗号分隔 | comma8.2 |
DOLLARw.d | 四舍五入至w宽度d个小数位数(w宽度包含小数、美元符合和逗号),以美元符合显示,以逗号分隔 | dollar6.2 |
MMDDYYw. | 09/12/97(MMDDYY8.)或者09/12/1997(MMDDYY10.),w表示所有字符和数字的宽度 | mmddyy10. |
$w. | 定义字符宽度 | $12. |
DATEw. | 16OCT99(DATE7.)或者16OCT1999(DATA9.) | date9. |