资源描述
Range极差 mean(1,2,3)平均 std 原则差
/**自动导入**/
Libname cwb “”;
proc import
datafile="E:\WORK\杂七杂八\SAS数据库\分期乐入池数据\明细数据(风险指标监控表&实际还款表)\荷包一期_风险指标监控表详细总表&today_date..xls"
out=work.risk001
dbms=excel replace;
sheet='风险指标监控表总表';
getnames=yes; 导入源文献字段名作为SAS数据集字段名
自动导入
%macro chouc(today_date);
datafile="C:\Users\抽查\一债权基本池报表&today_date..xls"
out=work.chouc01
dbms=excel replace;
sheet="债权基本池";
run;
%mend;
%chouc(0116);
导出:
proc export data=sashelp.cars
outfile=
'/folders/myfolders/sasuser.v94/TutorialsPoint/car_data.csv'
dbms=csv;
run;
/4*先排序*/
proc sort data=new_cy2;
by _COL1 ;
run;
/***标题**打印*/
proc print ;
title '员工薪水';
RUN;
proc print data=cwb.result0208 label;
id package;
var overdue_principal_za overdue_principal_fql;
label overdue_principal_za="违法停车" overdue_principal_fql="林肯" ;
run;
proc print data=cwb.result0208;
where principal_sell > 0000;
run;
/*登记表格*/
1\
proc tabulate data=work.risk005b;
class _COL22;分类变量
var _COL5;分析变量
table _COL22 _COL5;列维阐明/选项(math chinese)*(mean var)反映男女生数学语文成绩平均值方差
run;
2\
proc tabulate data=work.risk005b;
class _COL22;
var _COL5 _COL4;
table _COL22,(_COL4 _COL5)*(mean max min);
run;
table _COL22 all,(_COL4 _COL5)*(mean max min);加个ALL,有求和,图2.
也可写为例如table (_COL22 all)*(_COL4)*(mean);如图
也可加标签 table (sex all),(math chinese)*(mean std);
keylabel mean='平均值' std='原则差' all='总计';
label sex='性别' math='数学' chinese='语文';
run;
---------------------------------------------------------------------
/**复制*强制追加*把B加到A中*而SET是要新建一种*/
proc append base=chouc.chouc01 data=chouc.chouc02 force;/**force强制*/
run;
/**复制*强制追加*把B加到A中*而SET是要新建一种*/
proc sort data=chouc.chouc01 dupout=chouc.bb noduprecs;/**noduprecs一行完全相似重复记录*/
by descending _COL0 ;
run;
---------------------------------------------------------------------
/**sql*联合查询**/
Proc sql;
Select * from a
Union /*各种查询成果合并成一种成果,并去掉重复** /
Intersect /*查询公共某些数据*/
Except /*把公共某些去掉数据*/
Outer union /*对各种查询成果横向合并*/
Select * from b;
Quit;
---------------------------------------------------------------------
/**去**重复**办法之一***/
只显示name
select name from tb group by name having count(*) > 1
显示所有数据
select * from name in (select name from tb group by name having count(*) > 1)
*2、输出重复观测值,使用nodupkey选项,注意:使用该选项后直接将原数据集中重复值删除。注意dupout和out区别;
proc sort data=clasdata dupout=dups3 nodupkey;
by name class;
run;
*输出不重复观测值。;
proc sort data=clasdata out=nodups4 nodupkey;
by name class;
run;
*3、去掉重复观测值使用nodup选项。;
proc sort data =Clasdata out =NODUPS5 nodup;
by name class;
run ;/****删除***1月3日数据**/
data cwb.result;
set cwb.result;
if account_time="03jan"d then delete;
run;
SQL 去重复:
SELECT DISTINCT "栏位名"
FROM "表格名"
举例来说,若要在如下表格,Store_Information,找出所有不同店名时,Store_Information表格
store_name
Sales
Date
1
$1500
Jan-05-1999
2
$250
Jan-07-1999
1
$300
Jan-08-1999
3
$700
Jan-08-1999
我們就鍵入,distinct
SELECT DISTINCT store_name FROM Store_Information
結果:
1
2
3
---------------------------------------------------------------------
/*频率*****普通用这个*******************************************/
proc freq data = asd;
tables …..变量
run;
/**描述记录***例如*/
proc summary data=work.risk004 mean max min cv var;
class _COL4;
var _COL4;
output out=aa mean=a max=b min=c cv=d var=e;
run;
proc print data=work.aa;
run;
/*分类****频次************************************************/
proc means data=cwb.Overdue0102;
var veight;/**变量占比,即在总体中相对重要限度**/
freq _COL4;/**按照_COL4求观测值频度**/
class _COL222;/**按_COL22分类**/
run;
/*MEANS、SUMMARY*功能之外*还可以如例绘制PLOTS茎叶图、盒形图、正态概率图/NORMAL正态分布**/
proc univariate data=work.aa plots ;
var _col4;
run;
/**取第2行到第10行数据**/
Data aa;
Set aaa (firstobs=2 obs=10)
/**取前2行数据**/
Data aa;
Set aaa (obs=2);
Run;
---------------------------------------------------------------------
/1*筛选例***********************************************************/
data a(where=(_COL10>1500));
set cy;
where _COL21>18 and _COL18>1500;
where _COL29="上班人群";
run;
---------------------------------------------------------------------
/2*有7000个人,随机抽样25个********************************************/
PROC SURVEYSELECT
DATA = a
out = new_cy2
method = srs /**固定格式*/
n =25
seed = 7000;
RUN;
/**读取***几条记录***/
PROC SQL NUMBER OUTOBS=3;
SELECT * FROM WORK.A;
QUIT;
/3*有1000个人,按性别(sex)分为两层,每层按0.1比例抽样*******************/
proc surveyselect
data=c
out=d
method=srs
samprate=0,1
seed=25070419;
strata sex;
run;
proc print data=d;
run;
/**分层抽取***/
proc surveyselect /**随机**/
data = Work.chouc01
out = chouc.chouc01
method = srs
sampsize = (5,5,15 )/**抽取数据量*顺序与分层例相似*/
noprint;
strata _col22;/**分层**/
run;
/********求平均值********************/
proc sql;
select _COL3,mean(loan_amt,repay_amount)from fql;
quit;
/** N,10分位等
proc means data=wj.yrs_12 N P1 p10 p25 p50 p75 p90 p99 min max mean sum maxdec=2;/***规定最多输出2位小数**/
vars crlim epp_amt R_prin eve_prin age FEE_RATE epp_num R_num;
run;
---------------------------------------------------------------------
/**更新**已知数据集A和B,用A做为主数据集,生成新数据AB**/
data ab;
update a b;
by id;/**依照卡号更新数据*/
run;
/******模型****reg回归分析*****/
proc reg data=cwb.Overdue0102;
model _COL21= _COL22;
run; 记录核心字
((((( 1. means过程普通格式
proc means 选项列表;
by 变量名称(分组变量);
class 变量名称(分组变量);
freq变量名称(数值变量,用以表达相应记录浮现频数)
weight变量名称(数值变量,用以表达相应记录权重系数)
var 变量名称(待分析数值变量);
run;
univariate过程普通格式
proc univariate 选项列表;
by 变量名称(分组变量);
class 变量名称(分组变量);
freq变量名称(数值变量,用以表达相应记录浮现频数)
weight变量名称(数值变量,用以表达相应记录权重系数,占比,)
histogram 变量名称/选项列表
output <out=数据集名> <记录量核心字=自定义变量名>
pctlpts=<百分位数…> <指定需要百分位数>
pctlpre=<新变量名列> <指定所需百分位数相应输出变量名>
var 变量名称(待分析数值变量);
run;
SAS中可以计算描述性记录量核心字及其含义
核心字
所代表含义
n
有效数据记录数
nmiss
缺失数据记录数
mean
均数
std
原则差
stderr
原则误
var
方差
median
中位数
mode
众数
cv
变异系数
max
最大值
min
最小值
range
全距
sum
总计
sumwgt
加权值总计
css
校正离均差平方和
uss
未校正离均差平方和
clm
可信限(上下界值)
lclm
可信限下侧界值
uclm
可信限上侧界值
skew(skewness)
偏度
kurt(kurtosis)
峰度
t
分布位置假设检查之t记录量
probt
上述t记录量相应概率值
q1
第一四分位数
q3
第三四分位数
qrange
四分位数间距
p1
第一百分位数
p5
第五百分位数
p10
第十百分位数
p90
第九十百分位数
p95
第九十五百分位数
p99
第九十九百分位数
)))))))
---------------------------------------------------------------------
/**把分析成果以PDF显示*/
ods pdf file="C:\Users\chengwubin\Desktop\_ppdf.pdf";/*可以在指定途径或系统显示*/
proc means data=work.aa;
var _COL4 _COL5;
output out=work.bbbbb;
run;
proc print data=work.bbbbb;
run;
ods pdf close;
/**把分析成果以HTML显示*/
ODS HTML FILE="C:\Users\chengwubin\Desktop\FX.HTML"
CONTENTS="FXCON.HTML"/*固定格式*文献体存诸*/
FRAME="FXFR.HTML"/*固定格式*合并表内容*/
PAGE="FXPA.HTML";/*固定格式*指定分析存储到HTML*/
PROC MEANS DATA=WORK.AA;
VAR _COL4;
RUN;
ODS HTML CLOSE;
/*RTF格式,既word**/
ods listing close;/*关闭输出窗口*/
ods rtf file="C:\Users\chengwubin\Desktop\_ppdf.rtf";
proc means data=work.aa;
var _COL4 _COL5;
output out=work.bbbbb;
run;
proc print data=work.bbbbb;
run;
ods rtf close;
ods listing ;/*打开输出窗口*/
/**输出为DAT格式***/
filename wwb "C:\Users\chengwubin\Desktop";/*定义输出途径和文献名逻辑文献名**/
option nocenter;/*全局变量,显示不居中,靠左*/
ods listing file="C:\Users\chengwubin\Desktop\qa.dat";
proc print data=work.qa;/*SAS程序*/
run;
ods listing;/*打开OUTPUT窗口*/
/**输入为CSV格式,可用EXCEL打开**/
option nocenter;
filename exout "C:\Users\chengwubin\Desktop\work\fql抽查\cc1期.csv";
ods listing close;固定
ods results off;固定
ods csvall file=exout;固定
proc print data=chouc.chouc01;
run;
ods csvall close;固定
ods results on;固定
ods listing;固定
---------------------------------------------------------------------
/*GLMg普通线性模型*对3个学生分别测量在各年龄时身高状况*有关性*/
data aa;
input id sex $ y1-y3;
y=y1;age=10;
y=y2;age=15;
y=y3;age=20;
cards;
1 f 120 130 160
2 m 130 150 170
3 f 110 135 159
;
run;
proc glm data=aa;
class sex;
model y1-y3=sex;
repeated age 3 (10 15 20 );
run;
/*mixed模型为混合模型有与glm功能也更强大*/
data ab;
input id sex $ y1-y3;
y=y1;age=10;
y=y2;age=15;
y=y3;age=20;
cards;
1 f 120 130 160
2 m 130 150 170
3 f 110 135 159
;
run;
proc mixed data=ab;
class sex age;
model y=sex age;
repeated;/*没有指定R,用默认R距陈*/
run;
---------------------------------------------------------------------
例:
/*散点图*连线图gplot/
proc gplot data=A;
symbol i=none v=star;
/*SYMBOL语句是一种全程语句,指定绘图用连线方式、颜色、散点符号、大小,等等。SYMBOL语句可以带编号,如SYMBOL2,SYMBOL3*/
plot amount*_COL0;/*以SATV为纵轴、以SATM为横轴,用PLOT语句指定绘图用变量*/
run;
/*绘制曲线*/
proc gplot data=sasuser.air;
symbol1 i=join v=none line=1 ;/*第一种SYMBOL语句指定了LINE=1,表达线型为实线*/
symbol2 i=join v=none line=2 ;/*第一种SYMBOL语句指定了LINE=2,表达线型为虚线*/
plot co*datetime=1 so2*datetime=2 / overlay;
/*咱们在PLOT语句中用了“纵轴*横轴= n”格式来指定曲线使用哪一种SYMBOL语句规定来画, n相应于SYMBOL语句序号*/
run;
/*SYMBOL语句I=选项还可以取SPLINE表达在散点间连接连样条曲线,
A取I=SM nn( nn取00-99值)表达绘制样条曲线但可以不通过散点, nn值代表曲线光滑性与拟和度折中。
B取I=NEEDLE绘制每个点到横轴垂线。
C取I=RL 绘制线性回归直线,I=RQ为二次曲线,I=RC为三次曲线,
D背面加上CLI nn如RLCLI95表达在回归直线之外绘制预测值95%置信限曲线*/
/*用GCHART过程绘制直方图、扇形图、三维直方图等表达变量分布图形,*/
proc gchart data=fqll;
hbar _COL5;
run;
/*其中绘图用变量用VBAR语句给出。如果把VBAR改成HBAR则条形方向变为横向。
用GCHART绘制直方图和在INSIGHT中绘制直方图有所不同,它在横轴标是区间中点值,而在INSIGHT中横轴标是区间端点值。
可以绘制分组直方图,例如按性别分组绘制两个直方图并排放置,可以用如下程序:*/
goptions ftext="宋体";
proc gchart data=fqll;
title "剩余期限频率图";
vbar _COL6 / group=_COL20;
label _COL6 = "剩余期限";
run;
/*在GCHART中用PIE语句绘制表达频数扇形图,例如: */
proc gchart data=fqll;
pie _COL6 /TYPE=PERCENT;/*如果想显示比例值,只要在PIE语句中加入TYPE=PERCENT选项,*/
run;
用SAS/GRAPH绘图
SAS可以把存贮在SAS数据集中数据以图形方式形象直观地显示出来。在SAS/GRAPH 模块支持下,SAS可以作散点图、曲线图、直方图、扇面图、三维曲面图、等高线图、地图,等等。
散点图和曲线图
用GPLOT过程绘制散点图和曲线图。例如,咱们要绘制SASUSER.GPA中SATV对SASM散点图,只要用此程序:
proc gplot data=sasuser.gpa;
symbol i=none v=star;
plot satv*satm;
run;
成果显示了一种GRAPHICS窗口,绘出了以SATV为纵轴、以SATM为横轴散点图(见图 1)。在GPLOT过程中,用PLOT语句指定绘图用变量。SYMBOL语句是一种全程语句,指定绘图用连线方式、颜色、散点符号、大小,等等。SYMBOL语句可以带编号,如SYMBOL2,SYMBOL3 等,不带编号相称于SYMBOL1。
为了绘制连线,只要在SYMBOL语句中指定I=JOIN。例如,对SASUSER.AIR数据集,以DATETIME 为横轴、以CO为纵轴绘曲线图图,可以用:
proc gplot data=sasuser.air;
symbol i=join v=star;
plot co*datetime;
run;
见图 2。如果不想在图中浮现散点符号可以在SYMBOL语句中用V=NONE。
为了在图中作几条曲线,只要在PLOT语句中指定各种因变量(自变量普通应为同一种),并使用OVERLAY选项,如:
proc gplot data=sasuser.air;
symbol1 i=join v=none line=1 ;
symbol2 i=join v=none line=2 ;
plot co*datetime=1 so2*datetime=2 / overlay;
run;
其中咱们指定了两个SYMBOL语句,第一种SYMBOL语句指定了LINE=1,表达线型为实线,第二个SYMBOL语句指定了LINE=2表达线型为虚线。咱们在PLOT语句中用了“纵轴*横轴= n”格式来指定曲线使用哪一种SYMBOL语句规定来画, n相应于SYMBOL语句序号。
SYMBOL语句I=选项还可以取SPLINE表达在散点间连接连样条曲线,取I=SM nn( nn取00-99值)表达绘制样条曲线但可以不通过散点, nn值代表曲线光滑性与拟和度折中。取I=NEEDLE绘制每个点到横轴垂线。取I=RL 绘制线性回归直线,I=RQ为二次曲线,I=RC为三次曲线,背面加上CLI nn如RLCLI95表达在回归直线之外绘制预测值95%置信限曲线,例如:
proc gplot data=sasuser.gpa;
symbol i=rlcli95 v=star;
plot satv*satm;
run;
见图 3。GPLOT过程还可以有其他灵活用法,可以参照关于资料或用SAS系统菜单“Help | Extended Help”,从中找“SAS System Help:Main Menu | Graphics | GPLOT”。
直方图和扇形图
用GCHART过程绘制直方图、扇形图、三维直方图等表达变量分布图形。例如,要绘制SASUSER.GPA中GPA分布直方图,只要用:
proc gchart data=sasuser.gpa;
vbar gpa;
run;
其中绘图用变量用VBAR语句给出。图形见图 4。如果把VBAR改成HBAR则条形方向变为横向。用GCHART绘制直方图和在INSIGHT中绘制直方图有所不同,它在横轴标是区间中点值,而在INSIGHT中横轴标是区间端点值。
可以绘制分组直方图,例如按性别分组绘制两个直方图并排放置,可以用如下程序:
proc gchart data=sasuser.gpa;
vbar gpa / group=sex;
run;
成果见图 5。
在GCHART中用PIE语句绘制表达频数扇形图,例如:
proc gchart data=sasuser.gpa;
pie sex;
run;
成果见图 6。如果想显示比例值,只要在PIE语句中加入TYPE=PERCENT选项,如“pie sex / type=percent;”。
GCHART过程还可以用BLOCK语句绘制三维直方图。例如,在SASUSER.HOUSES有各种房子状况,其中BEDROOMS表达卧室个数,STYLE表达房子式样,都是分类变量,咱们可以用如下程序画出反映卧室个数和房子式样联合分布三维直方图:
goptions hpos=90 vpos=70;
proc gchart data=sasuser.houses;
block style / group=bedrooms;
run;
三维曲面图和等高线图
假设对一种二元函数z=f(x,y),咱们有了x取等间隔值、y取等间隔值时z值,这时咱们可以用G3D过程绘制曲面图形,用GCONTOUR绘制曲面等高线图。
例如,咱们想绘制一种二维正态分布曲面图形,假设(X,Y)服从联合正态分布,其均值都是0,方差分别为1和a,有关系数为r。这时,咱们可以得到(X,Y)联合密度函数公式为:
咱们可以在一种网格上计算曲面值:
data dnorm2;
a=2;
a2=sqrt(a);
r=0.5;
det=a*(1-r*r);
do x=-3 to 3 by 0.3;
do y=-3*a2 to 3*a2 by 0.3*a2;
z=1/(2*3.1415926*det)*exp(-0.5/det*(a*x*x + y*y - 2*r*a2*x*y));
output;
end;
end;
keep x y z;
run;
然后,咱们就可以用G3D过程来绘制曲面图:
proc g3d data=dnorm2;
plot x*y=z;
run;
见图 8。用GCONTOUR过程可以绘制曲面相应等高线图,例如:
proc gcontour data=dnorm2;
plot x*y=z;
run;
见图 9。
图形调节与输出
各绘图过程中都指定了丰富选项来调节图形,读者可以参照关于资料或查系统协助。此外,在图形中也可以用TITLE语句和FOOTNOTE语句给图形加标题和脚注。为了在图形标题、标签中也能使用中文,老SAS版本需要比较多环节,但是在Windows下SAS 8.0后来只要很简朴语句就可以在图形中使用True Type字型中文,例如:
goptions ftext="宋体";
proc gplot data=sasuser.class;
title "实验FONTS中文功能";
plot weight * height;
label weight = "体重" height="身高";
run;
见图 10。
您位置: 首页>>课程辅导>>SAS过程初步
.
SAS过程初步
.(转载自SAS园地)
· SAS过程用法及惯用语句
o SAS过程用法
o SAS过程步惯用语句
· 用PRINT过程制作列表报告
o 基本用法
o 使用中文列标题
o 标题及全程语句
o 用BY语句分组解决
o 计算总计和小计
· 用TABULATE过程作记录量表格
· 用SORT过程排序
· MEANS过程、UNIVARIATE过程、FREQ过程
· 用CORR过程计算有关系数
· 用SAS/GRAPH绘图
o 散点图和曲线图
o 直方图和扇形图
o 三维曲面图和等高线图
o 图形调节与输出
前面讲过,SAS系统用SAS数据步生成和管理数据,用过程步进行分析、报表、绘图。本章简介SAS过程步普通用法和惯用语句含义,以及几种简朴报表、分析、绘图过程使用。
SAS过程用法及惯用语句
SAS过程用法
SAS过程步普通形式为:
PROC 过程名 DATA=输入数据集 选项;
过程语句 / 选项;
过程语句 / 选项;
……
RUN;
其中PROC语句选项是可选,用来规定过程运营某些设立,如果有各种选项用空格分开。DATA=输入数据集也是可选,如果缺省话使用近来生成数据集。过程步普通以RUN 语句结束,也可以省略RUN语句而在下一种过程步或数据步开始处结束,此外尚有一种所谓 “交互式过程”可以在遇到RUN语句时不结束过程运营,只有遇到QUIT语句或者下一种过程步、数据步时才结束。过程步在PROC语句之后、结束之前可以有若干个过程语句。普通状况下,过程语句与数据步中语句不同,数据步中语句不能用在过程步中。过程步语句普通以某一种核心字开头,例如VAR、BY、TABLES、WEIGHT等,语句中有某些关于阐明,如果有选取项话要写在斜杠后。
SAS过程步有些是对数据集作某种变换(例如SORT过程对数据集排序),不生成显示成果;多数过程步是对数据集作某些分析、报表,这时成果出当前OUTPUT窗口(高精度绘图过程输出在GRAPHICS窗口)。对OUTPUT窗口成果,咱们可以用“File | Save As”菜单把它保存到一种文本文献进行进一步修饰,插入到其他报告中,也可以用“File | Print ”菜单之间打印。
SAS过程步惯用语句
本小节简朴简介几种在SAS过程步中常用语句,更详细用法可以在后来实际用届时再仔细体会。
一、VAR语句
VAR语句在诸多过程中用来指定分析变量。在VAR背面给出变量列表:
VAR 变量名1 变量名2 … 变量名n;
变量名列表可以使用省略形式,如X1-X3,MATH--CHINESE等。VAR用法例如:
var math chinese;
二、MODEL语句
MODEL语句在某些记录建模过程中用来指定模型形式。其普通形式为
MODEL 因变量 = 自变量表 / 选项;
例如
model math=chinese;
即用语文成绩预测数学成绩。
三、BY语句和CLASS语句
BY语句在过程中普通用来指定一种或几种分组变量,依照这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定分析。在使用带有BY语句过程步之前普通先用SORT过程对数据集排序。例如,假设咱们已经把C9501数据集按性别排序,则下列PRINT 过程可以把男、女生分别列出:
proc print data=c9501;
by sex;
run;
成果为
The SAS System 2
----------------------------------- SEX=男 -----------------------------------
OBS NAME MATH CHINESE
1 李明 92 98
2 王思明 86 90
3 张聪 98 109
----------------------------------- SEX=女 -----------------------------------
OBS NAME MATH CHINESE
4 张红艺 89 106
5 刘颍 80 110
在某些过程(如方差分析)中,使用CLASS语句指定一种或几种分类变量,它实际相称于因变量。而在另某些过程(如MEANS)中,CLASS语句作用与BY语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析。使用CLASS时不需要先按分类变量排序。
四、OUTPUT语句
在过程步中经惯用OUTPUT语句指定输出成果存储数据集。不同过程中把输出成果存入数据集办法各有不同,OUTPUT语句是用得最多一种,其普通格式为:
OUTPUT OUT=输出数据集名 核心字=变量名 核心字=变量名 …;
其中用OUT=给出了要生成成果数据集名字,用“核心字=变量名”方式指定了输出哪些成果(核心字例子例如MEANS过程中MEAN,VAR,ST
展开阅读全文