二、排序、打印和汇总数据
1、where语句生成子集
语法:where condition
放在proc print xxx之后。
Mary Cassatt ,Impressionism ,U
Paul Cezanne ,Post-impressionism,F
Edgar Degas ,Impressionism ,F
Paul Gauguin ,Post-impressionism,F
Claude Monet ,Impressionism ,F
Pierre Auguste Renoir,Impressionism ,F
Vincent van Gogh ,Post-mpressionism,N
要求:变量Name,Genre,Origin。将Genre为Impressionism的数据输出,并给出F=France,N=Netherland,U=USA的标注。
结果:
注:
- 读取数据时,变量Name和Genre数据值过长,一定要有冒号的格式读取,要不然Impressionism无法完整读取,后面where语句Genre='Impressionism’也就继续不了;
- fotnote=‘xxxx’ xxxx是标志内容,打印出来在页面底部。
2、proc sort对数据排序
语法proc sort data=xx out=xxx;
诸如nodupkey(删除具有相同by变量值的观测),dupout=xxxx(将删除的观测输出到指定的数据集中)等语句可以放在proc sort语句中。
beluga,whale,15,dwarf,shark,0.5,sperm,whale,60
basking,shark,30,humpback, ,50,whale,shark,40
qray,whale,50,blue,whale,100,killer,whale,30
mako,shark,12,whale,shark,40
要求:变量Name,Type,Length;用by语句将数据先按Type升序再按Length降序。
结果:
注: 在原文件中缺失值处要打一个空格,如果没有打空格直接是两个逗号会被无视,读成下面的结果,读csv文件明明两个连续逗号默认为缺失值,不知道这里怎么没有成功。
3、字符数据的排序
ASCII 空格 数字 大写字母 小写字母
EBCDIC 空格 小写字母 大写字母 数字
proc sort sortseq=linguistic (strength=primary):忽略大小写
proc sort sortseq=linguistic (numeric_collation=on):将数字当作数值处理
Seiki,100 A St. ,juneau,alaska
Wong,2 A St. ,Honolulu,Hawaii
Shaw,10 A St. Apt. 10,Juneau,Alaska
Smith,10 A St. Apt. 2 ,honolulu,hawaii
要求:变量为Name,Street,City,State,生成两个数据集,一个按数值大小(by Street)排序,一个不区分大小写排序(by State)。
结果:
注: 输出语句不要涂方便直接写成了proc print data=Address_sort data=Address_sort_1;
第二个数据集会被忽略。
4、proc print中的选项
proc print noobs label;noobs去掉输出的obs观测序号,label添加标签,暂时还不知道怎么用,见后面。
Adriana,21,3/21/2012,MP,7
Nathan,14,3/21/2012,CD,19
Matthew,14,3/21/2012,CD,14
Claire,14,3/22/2012,CD,11
Ian,21,3/24/2012,MP,18
Chris,14,3/25/2012,CD,6
Anthony,21,3/25/2012,MP,13
Erika,21,3/25/2012,MP,17
要求:变量Name,Class,Date,Type,Quantity。制作报表:利润为数量*1.5,按班级排序,计算每个学生的利润,每个班的利润,用var打印出Name,Date,Type,Profit。
结果:
注:
- proc sort和proc print都用了by class,因为既要按班级给所有变量排序,又要将利润按班级汇总;
- 这里日期直接输出文件里日期形式,直接将Date当成字符,没有格式化输出,因为用infile语句读数据,我还没成功过mmddyyw.的日期格式化输出,用cards语句倒是可以,见下面(这里没有将利润按班级汇总,而是直接给出总利润):
5、自定义格式proc format
语法:
proc format;
value name1 变值1=‘格式值1’