作者:HuPangpang_ | 来源:互联网 | 2023-10-15 10:12
1 print过程proc print <data=数据集名> <选项>;/*label指定打印输出标签 noobs制定不显示观测序号*/
by 变量名1<变量名2>;
footnote<n> <'footnote'>;
format 变量名1 输出格式名;
id 变量名1<变量名2>;
label 变量名='标签名';
pageby 变量名;
sum 变量名1<变量名2>;
sumby 变量名1<变量名2>;
title<n> <'标题内容'>;
var 变量名1<变量名2>;
where 条件语句
run;
2 means过程proc means <data=数据集名> <选项><统计关键量>;
/*noprint 禁止统计报告输出到output,maxdec=n指定列表输出的最大小数位数;常用统计关键字,如max min sum
var 变量名1<变量名2>;
by 变量名1<变量名2>;
class 变量名1<变量名2>;
freq <变量名>;
weight <变量名>;
id 变量名1<变量名2>;
output <out=数据集名 > 关键字=<新变量名列>;
run;
3 copy过程
复制一个逻辑库下所有数据集到另一个逻辑库下或者一个文件复制到另一个文件
move 选择指定在成功复制到输出库out=指定逻辑库后,从源逻辑库中删除已经复制的成员
select 选择复制的数据集名,exclude排除不需要复制的数据集名
select和exclude不能同时出现,功能相反
proc copy in=源逻辑库名 out=目标逻辑库名 >;
select 成员名 ;
exclude 成员名 ;
run;
libname jx 'd:\jx';/*创建源逻辑库*/
libname sy 'd:\test';/*创建目标逻辑库*/
data jx.stu;input id name $ class;
cards;
1001 高兴 1
1002 你好 1
;
run;
data jx.stu2;input id name $ class;
cards;
1001 董好 2
1002 刘小名 2
;
run;
/*调用copy过程复制数据集到目标逻辑库*/
PROC copy in=jx out=sy move;
/*in=指定源逻辑库名,out=目标逻辑库名,move选择指定复制成功从源逻辑库删除复制的数据集*/
select stu stu2;
/*选择复制的数据集名*/
run;
4 sql过程
实现了关系数据库的结构化查询功能,体现了sas对大型数据库管理系统通用的sql语言支持
proc sql <选项>;
数据操纵语句;
quit;
DATA stu_score;
input id name $ chinese math english;
cards;
1001 高兴 58 78 90
1002 马小名 78 38 88
1003 刘小华 89 90 87
1004 董下小 60 80 52
1005 杨小名 38 45 51
1006 张与信 99 89 87
;
RUN;
PROC sql;
select name as 姓名,(case when chinese>=80 then '优秀'
when chinese>=60 then '及格'
else '不及格' end) as 语文,
(case when math>=80 then '优秀'
when math>=60 then '及格'
else '不及格' end) as 数学,
(case when english>=80 then '优秀'
when english>=60 then '及格'
else '不及格' end) as 英语
from stu_score;
QUIT;
DATA ym;
length sj $10.;
input dm $ sj $ jg $;
cards;
金羽 2012-05-01 胜
金羽 2012-05-01 胜
金羽 2012-05-01 负
金羽 2012-05-01 负
金羽 2012-05-02 胜
飞翔 2012-05-02 负
飞翔 2012-05-02 胜
飞翔 2012-05-02 负
;
RUN;
PROC sql;
select dm as 队名,sj as 日期, sum(case when jg='胜' then 1 else 0 end) '胜',sum(case when jg='负' then 1 else 0 end) '负' from ym
group by dm,sj
order by dm desc,sj asc;
QUIT;
5 report过程
制作报表的工具,将print、means、tabulate过程的特点与data步报告写法的特点结合起来组合成一个强大的生成报表的工具
headline 指定表头划线 headskip 指定空一行column 指定报表显示列 define 对报表显示列定义属性
compute 指定计算列
libname re 'd:\jx';
data re.house;
input city $ hb_index same_index def_index;
cards;
北京 99.9 100.3 102.4
天津 99.8 100.2 103.1
秦皇岛 99.8 100.5 106.3
石家庄 99.7 101.3 107.7
包头 99.8 100.0 103.9
太原 100.0 100.9 101.7
;
RUN;
proc print data=re.house;
run;
PROC report data=re.house headline headskip;
title '六个大中城市住宅销售价格指数 (2012年2月)';
title2 '单月城市销售价格';
column city hb_index same_index def_index dif;
define city /order format=$6. hljs-number">6
'城市';
define hb_index/display
format=
5.1 hljs-number">5
'环比';
define same_index/display
format=
5.1 hljs-number">5
'同比';
define def_index/display
format=
5.1 hljs-number">5
'定基';
define dif/computed
format=
5.1 hljs-number">5
'差比';
compute dif ;
dif=same_index-hb_index;
endcomp;
RUN;
6 freq过程
计数资料的统计推断,主要两个目的:一是描述分析产生频数和列联表,可简单描述数据;二是统计推断,产生各种统计量,可分析变量间关系,freq可以创建单向频数表,双向和n向交叉表
exact 指定精确测试 tables:若没有这个语句,freq对数据集中每个变量都成圣一个单向频数表
proc freq <选项>;
by 变量名1<变量名2>;
footnote<n> <'footnote'>;
exact 统计选项计算选项>;
output <out=数据集名>选项;
tables requests 选项>;
test 选项;
weight 变量名选项>;
run;
7 summary过程
对数值变量计算单个变量的基本统计量,使用语句与means过程类似
8 compare过程
比较两个数据集内容
9 datasets过程
对sas逻辑库中的sas文件进行列表、复制、换名、添加和删除等操作
10 surverselect抽样过程
常用的抽样有单纯随机抽样(simple random sampling)系统抽样(systematic sampling)分层抽样(stratified sampling) srs sys urs
method= 指定抽样方法,samprate=指定抽样比例,seed=n指定随机数 strata 指定分层变量
DATA sj ;
Do i = 1 to 10000 ;
output ;
end ;
RUN;
PROC surveyselect
data =sj
method = srs
n = 100
out=cysj seed =100;
RUN;
PROC surveyselect
data =sj
method = srs
samprate=0.2
out=cysj2 seed =100;
RUN;
定义数值或者符号文字的输出和输入格式,定义好的变量类型可以在数据步直接引用
value 定义输出格式 invalue 定义输入格式 picture 给出定义的图示输出格式 select 选择给出的输入\输出格式的目录子集
PROC format;
value card_type
1001='普卡'
1002='金卡'
1003='白金卡'
1004='国航联名卡'
1005='标白卡';
RUN;
DATA card;
input id bh;
cards;
1001 345
1002 456
1003 870
1004 987
1005 876
;
RUN;
DATA trans_card;
set card;
idbh=put(id,card_type.);
RUN;
PROC PRINT DATA=trans_card;
RUN;
PROC format;
value scor_desc 0-<60='不及格'
60-<80='良好'
other='优秀';
RUN;
DATA stu_score;
input id name $ score;
cards;
1001 高宏 58
1002 马小名 60
1003 刘晓华 80
1004 董青青 90
1005 杨峰 78
;
RUN;
PROC PRINT DATA=stu_score;
format score scor_desc.;
RUN;
12 sort过程
将数据集中某一个变量或几个变量按升序或降序重新排列并把结果存储到输出数据集中
noduprecs 删除重复的记录,发生在排序后 nodupkey 删除重复的by变量记录,发生在排序中,
datecopy暴力数据集创建或修改日期force 强制排序选项
PROC sort data=stu out=stu_order noduprecs ;
by name;
RUN;
PROC sort data=stu out=st_order nodupkey ;
by descending name;
RUN;
DATA ecnomic;
input y_moth $ agri_pro;
cards;
201201 2.3
201202 3.1
201203 2.9
201204 3.2
201205 2.8
;
RUN;
DATA analy;
set ecnomic;
cz=agri_pro-lag(agri_pro);
RUN;
PROC means data=analy;
var cz;
RUN;