sas程序
快捷键:
F3 运行
Ctrl+e 清空
Ctrl+o 打开文件快捷键
RUN
上下文: [GLOBAL STATEMENT] RUN 语句
Syntax: RUN <CANCEL>;
Executes the previously entered SAS statements.
Although the RUN statement is not required between steps in a SAS program, using it creates
a step boundary and can make the SAS log easier to read.
Arguments:
CANCEL
terminates the current step without executing it. SAS prints a message that indicates that the step was not executed.
CAUTION:
The CANCEL option does not prevent execution of a DATA step that contains a DATALINES or DATALINES4 statement.
CAUTION:
The CANCEL option has no effect when you use the KILL option with PROC DATASETS.
数据步 data
data ngj.test; #data开头;
.....
.....
run;(quit;) #执行;
过程步 proc
proc print; #proc开头;
title'hello world'
run;(quit;) #执行;
文件名
data a;
生成一个a命名的数据集
file print;把本来在日志窗口显示的在输窗口显示
put 'hello world' 把引号内内容在日志窗口显示出来
run;
proc print;
run;
proc sort ;data=oranges
run;
libname file_name(自定义文件名称用于存放在sas中,或者使用历史已经定义好的文件名) 地址(文件在电脑中的物理地址)
data file_name.(wenjainming )需要自己定义
例:
libname ngj BASE "F:\WORKSPACE\RISK\niuguangjie";
data ngj.test;
set apply_20190730;
by apply_no;
run;
一句话,put把数字变成文本,input则反之。
input介绍:
input 后面添加要查看的变量名称 负责生成变量的
input x1-x5 意思是从x1到x5 [x1 x2 x3 x4 x5]
x6 $ :意思是x6为字符串形式的变量
date yymmdd15. :意思是date为日期形式的变量 占15位
x7 = 'o' :表示字符串
x8 = 'i am a student' :表示字符串
cards:
后面接数据values
结束时使用;号
run;执行数据
data步介绍
算术运算符:+ - * / **(乘方)
比较算符:=(EQ) ^=(NE) >(GT) <(LT) >=(GE) <=(LE) in
逻辑算符:
&(AND) :与
|(!)(OR) :或
^(~)(Not):反
其它:
><(最小值)
< >(最大值)
||(!)(连接)
在括弧里的表达式先计算
第一级:** (+ -)前缀 ^ >< < >
第二级:* /
第三级:+ -
第四级:||
第五级:其余比较算符
第六级:&
第七级:|
数学函数:abs()、max ()、min ()、mod (x, y)、sign (x)、sqrt (x)、 sum ()、 mean ()、exp (x) 、log (x)、log10 (x)、log2(x) 、sin (x)、arsin (x)
截取函数:ceil (x)、floor (x)、int (x)、round (x,n)
字符函数:
index (S, S1) 在S中查找s1
substr (S , p, n)
scan(S2,n)
upcase(S) 将S转变成大写
compress(S,S1)
日期函数
SAS系统存贮日期值为1960年1月1日到指定日期之间的天数
SAS存贮时间值为从午夜开始到指定时间的秒数
日期时间值存贮为1960年1月1日午夜到指定日期时间之间的秒数
日期时间函数:
weekday ( ) 返回周几
day() 返回几号
month() 返回第几月
qtr() 返回季度
year() 返回年
intck('year',x,y) x,y为日期 返回x-y的年数
概率统计函数:probnorm (x) n (of X1-Xn)、nmiss (of X1-Xn), var (of x1-xn)、std (of x1-xn)
随机数函数:rannor (seed)、ranuni (seed)
Functions例
set的使用方法
SET
上下文: [DATA STEP] SET 语句
Syntax: SET <SAS-data-set(s) <(data-set-options(s) )>> <options>;
Reads an observation from one or more SAS data sets.
从一个或多个SAS数据集读取观察结果。
data a;
input id ming $ sex $ @@;
cards;
1 MARY F
3 ANN F
4 TOM M
;
data b;
input id name $ sex $ @@;
cards;
2 JOSE F
5 ERIE M
6 MAY F
1 MARY M
;
data result;
set a(rename=(ming=name)) b(in=inb);
/*数据集选项in=inb,规定临时变量inb,该变量标识观测是否来自b数据集,来自b数据集时,inb为1,否则为0*/
*by id;
/*通过id连接在一起*/
if inb=1 then bonus=100;
run;
proc print;
title'串接数据集';
run;
data loss;
set risk.loss;
loss_mark=1; #添加loss_mark一列;
loss_mob=intck("month", disbursed_date, loss_date); #添加loss_mob一列;
if loss_mob le 6 then #通过判断条件结果添加 floss_mark一列;
floss_mark=1;
run;
排序:
proc sort data=person; 过程步 排序数据集为person
by name; 根据name列排序,默认为升序
proc sort data=place;
by name;
data result;
merge的使用方法:
data file_name:
merge Apple(in=a) orange(in=b); 相当于Apple as a organge as b
by apply_no;
if a=b; (相当于inner join)
if a; (相当于left join)
if b; *by name;
proc print;
title'DATA SET RESULT';
run;
tips:
merge和merge by
merge就是讲a表与b表直接连接不参考任何内容,只按照序号连接
merge by按照by后面的字段来匹配连接
by id
merge例子:
/*把逾期表与百融数据连接起来使用左连接*/
data bairong;
set risk.bairong_credit;
where apply_no ^= 0 ;
run;
proc sort data=loan equals;
by apply_no;
run;
proc sort data=bairong equals;
by apply_no;
run;
data total;
merge loan(in=a) bairong(in=b);
by apply_no;
run;
/*把风险表、首逾、七天首逾表合并起来*/
proc sort data=table2 ;
by &base &time_level;
run;
proc sort data=flag_1_2 ;
by &base &time_level;
run;
proc sort data=flag_7_2;
by &base &time_level;
run;
data union_fx_1;
merge table2
flag_1_2
flag_7_2;
by &base &time_level;
run;
RETAIN
上下文: [DATA STEP] RETAIN 语句
Syntax: RETAIN <element-list(s) <initial-value(s) |
(initial-value-1) | (initial-value-list-1) >
< ... element-list-n <initial-value-n |
(initial-value-n ) | (initial-value-list-n)>>>;
Causes a variable that is created by an INPUT or assignment statement to retain its value from
one iteration of the DATA step to the next.
使由输入或赋值语句创建的变量从数据步骤的一次迭代到下一次迭代保留其值。
/*用retain排序,并并剔除不需要的变量*/
data union_fx_2;
retain &base daiyu_n_Sum
outstanding_amt_Sum
flag_1_amt_sum
flag_1_rate
flag_7_amt_sum
flag_7_rate
m0_qx_amt_Sum
m1_qx_amt_Sum
m2_qx_amt_Sum
m3_qx_amt_Sum
m4_qx_amt_Sum
m5p_qx_amt_Sum
m1_ratio
m2_ratio
m3_ratio
m2p_ratio
m4p_ratio
M0_M1 M1_M2 M2_M3 M3_M4 M0_M4
loss_n_Sum
LOSS_AMT_Sum
annual_loss_ratio
RECOVERY_AMT_Sum
net_loss_amt_Sum
annual_net_loss_ratio
net_floss_amt_Sum
annual_net_floss_ratio;
set union_fx_1;
run;
/*排序,并转置*/
proc sort data=union_fx_2 ;
by &base &time_level;
run;
proc transpose data=union_fx_2 out=&time_level._&base.;
by &base ;
id &time_level;
/*var ;*/
run;
WHERE
上下文: [DATA STEP] WHERE 语句
Syntax: WHERE where-expression-1
< logical-operator where-expression-n>;
Selects observations from SAS data sets that meet a particular condition.
从满足特定条件的SAS数据集中选择观测值。
LAG
上下文: [SAS FUNCTION] LAG 函数
Returns values from a queue. n specifies the number of lagged values.
DROP
上下文: [DATA STEP] DROP 语句
Syntax: DROP variable-list;
Excludes variables from output SAS data sets.
从输出SAS数据集中排除变量。
%macro 宏
%MACRO
上下文: [GLOBAL STATEMENT] %MACRO 语句
[Syntax: %MACRO macro-name <(parameter-list)></ option(s)>;]
Begins a macro definition.
开始宏定义。
#简单宏例子;
#%macro 宏名称(传入变量=);
%macro yourdays(birthday=); #%macro开头;
data _null_;
file print;
y=today();
x=&birthday;
year=Intck('year',x,y); #intck('year',x,y) x,y为日期 返回x-y的年数;
qtr=Intck('qtr',x,y);
month=Intck('month',x,y);
week=Intck('week',x,y);
day=Intck('day',x,y);
#put 后面接输出数据;
put "你在这个世界上活了"year"年,"
month"月," week"星期," day"天。";
run;
%mend; #%mend;作为宏的结束;
%yourdays(birthday='06dec1994'd); #调用宏的方法 "%宏名称(变量名=‘ ’);" ;
#SAS宏详解;
局部变量使用下面的语法声明。
%LET
上下文: [GLOBAL STATEMENT] %LET 语句
[Syntax: %LET macro-variable =<value>;]
Creates a macro variable and assigns it a value.
创建宏变量并为其赋值。
%LET (Macro Variable Name) = Value;
%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
在宏使用双引号进行设置
宏程序
宏是一组SAS语句,由名称引用,并在程序中使用该名称在任何地方使用它。
它以%MACRO语句开始,以%MEND语句结束。
句法
局部变量使用下面的语法声明。
以下程序在名为“show_result”的宏下对一组SAT staemnets进行解密; 此宏正由其他SAS语句调用。
%MACRO show_result(make_ , type_); %make和type是要重复使用的变量名称
proc print data = sashelp.cars;
where make = "&make_" and type = "&type_" ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
%MEND;
%show_result(BMW,SUV);