例3 动物园给动物喂食的数据(C:\\MyRawData\\zoo.dat),变量为动物类型、生物学分类、居住区域、喂食时间(上午/下午/两者):
读入数据并输出两个列表,一个是早上喂食,一个是下午喂食。 代码:
data morning afternoon;
infile 'c:\\MyRawData\\Zoo.dat';
input Animal $ 1-9 Class $ 11-18 Enclosure $ FeedTime $; if FeedTime = 'am' then output morning;
else if FeedTime = 'pm' then output afternoon; else if FeedTime = 'both' then output;
/* 每个数据集都输出,省略数据集名 */
run;
proc print data = morning;
title 'Animals with Morning Feedings'; proc print data = afternoon;
title 'Animals with Afternoon Feedings'; run;
运行结果:
三、用IF-THEN语句将观测值分组
对观测值分组,实际上只是为每个观测值分配一个分组标签,用新的列变量存储分组标签,这样后续就可以借助分组关键词(class),对数据做分组处理。
例4 住房改善的数据(C:\\MyRawData\\home.dat),包括了姓名、改善工作、改善成本:
读取数据,并新建了一个CostGroup的变量。根据Cost的值将数据分成high、medium、low和missing三类。 代码:
data homeimprovements;
infile 'c:\\MyRawData\\Home.dat';
input Owner $ 1-7 Description $ 9-33 Cost; if Cost =. then CostGroup = 'missing';
else if Cost < 2000 then CostGroup = 'low';
else if Cost < 10000 then CostGroup = 'medium'; else CostGroup = 'high'; run;
proc print data = homeimprovements; title 'Home Improvement Cost Groups'; run;
运行结果:
程序说明:缺省值要单独分组,否则将归类到low类(缺省值默认是
最小值,甚至比负数都小)。
(二) WHERE语句
二、 基本语法
WHERE语句和IF语句作用基本相同,不同在于IF语句只用于数据步,WHERE语句还可用于过程步(不创建新数据集),作用是让“只有满足条件的观测值被proc过程处理”。语法: where 条件;
例5 画家信息的数据文件(C:\\MyRawData\\ Artists.dat),包括画家姓名、流派、国别:
读入数据,只输出流派为Impressionism的画家。 代码:
data painters;
infile 'c:\\MyRawData\\Artists.dat';
input Name $ 1-21 Genre $ 23-40 Origin $ 42; run;
proc print data = painters; where Genre = 'Impressionism';
title 'Major Impressionist Painters';
footnote 'F = France N = Netherlands U = US'; run;
相关推荐: