sas使用手册

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);


版权声明:本文为qq_39885465原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。