data example1;
input name$ sex$ age course$ grade ;
cards;
刘明 男 21 math 85
刘明 男 21 chinese 80
王二 男 19 math 78
王二 男 19 chinese 60
;
run;
proc print data=example1;
title 'example1';
run;
/*每行下面添加一新行*/
data exa1;
set example1;
output;
course="average";output;
run;
/*每分组添加一新行*/
proc sort data=example1 out=example1;
by name sex age course;
run;
data exa2;
set example1;
by name sex age;
output;
if last.age then do;course="average";output;end;
run;
/*任意行添加一新行*/
data exa3;
set example1;
output;
if _n_=2 then do;
do i=1 to 2;
call missing(of name sex age course grade);
name="学霸";
sex="男";
age=16;
course="全部";
grade=100;
output;
end;
drop i;
end;
run;
/*循环中使用*/
data example2;
do x=1 to 3;
do y=1 to 2;
a="a";output;
end;
end;
run;
/*输出多个数据集*/
data ma ch;
set example1;
if grade=60 then output ma;
else if grade=78 then output ch;
run;
/*将一条观测变成多条观测*/
data example4;
input name$ sex$ course$ grade @;
output;
input course$ grade @;
output;
input course$ grade;
output;
cards;
刘明 男 语文 85 数学 78 历史 60
王二 男 数学 60 语文 85 历史 98
;
run;
/*输出统计量*/
data example5;
input name$ sex$ age course$ grade ;
cards;
刘明 男 21 chinese 85
刘明 男 19 math 60
李丽 女 20 chinese 98
李丽 女 20 math 70
曾阿丽 女 19 math 80
曾阿丽 男 22 chinese 78
曾阿丽 男 20 other 100
罗森 男 20 math 78
;
run;
proc sort data=example5 out=example5;
by name sex age course;
run;
proc means noprint data=example5;
var grade;
class name;
output out=example6 mean(grade)=mgrade sum(grade)=totgrade;
run;