创建和运行 SAS 程序

SAS 程序包含两类程序步:DATA 步 PROC 步。这两类程序步构成了所有 SAS 程序,它们既可以单独使用也可以结合使用。

DATA 步通常用于创建或修改 SAS 数据集,但也可用来生成定制报表。例如,可以使用 DATA 步执行以下任务:

  • 将数据放入 SAS 数据集
  • 计算新变量的值
  • 检查并更正数据中的错误
  • 通过对现有数据集取子集、合并和更新来生成新的 SAS 数据集

PROC 步通常用来分析和处理 SAS 数据集形式的数据,有时还可创建包含过程结果的 SAS 数据集。PROC 步控制预编写例程(过程)的逻辑库,其中的例程用于对 SAS 数据集执行数据列表、排序和汇总等任务。例如,可以使用 PROC 步执行以下任务:

  • 列显报表
  • 生成描述性统计量
  • 创建表格式报表
  • 生成点/线图和图表

SAS 程序特征

接下来让我们逐一查看示例程序中的各个语句。SAS 程序由 SAS 语句构成,该语句具有两个重要特征:

  • 通常以 SAS 关键字开头
  • 始终以分号结束 

DATA 步以关键字 DATA 开头,PROC 步以关键字 PROC 开头。通常,RUN 语句或新的 DATA 或 PROC 步的开始即标志着某一程序步的结束。RUN 语句用于向 SAS 说明要处理当前程序步中该语句之前的所有行。

SAS 语句不区分大小写。可使用空格或特殊字符分隔 SAS 语句中的“单词”。



options nodate;                                                                                                                         
                                                                                                                                        
date test; 
  set mylib.productsales;                                                                                 
run;   
                                                                                                                                 
proc print data=test label noobs;                                                                     
title "产品销售" ;                                                                                                   
run;                                                                                                                                    
      

  • 要删除每页顶部的日期,可使用 NODATE 系统选项。请复制下面的 OPTIONS 语句,并将其粘贴到程序的顶部:
    options nodate;
  • 要替换默认标题,可使用 TITLE 语句。请复制下面的行,将其添加到 PRINT 过程的 RUN 语句之上:
    title "Product Sales Report";
    通过在 PROC 步中引用 TITLE 语句,该标题便可应用到过程输出中。

  • 要删除 Obs 列并使用列标签,可使用 PROC PRINT 语句中的选项。更改 PROC PRINT 语句,向其添加 LABEL 和 NOOBS 选项。PROC PRINT 语句应如下显示:
    proc print data=test label noobs;

    创建 HTML 输出

    您已经了解了在“输出”窗口中可以创建 SAS 列表输出,不过,您还可以设置参数选择创建 HTML 输出,您的参数选择将存储在不同的会话中。


    1. 选择工具然后 选项然后参数选择

    2. 点击结果选项卡。

    3. 选中创建 HTML 复选框。
    4. 确定。

    四、由外部文件转化为SAS数据集

    data datasetname;

    infile 'filename' options;

    input 变量名;

    如D盘test.dat则为

    data dal;

    infile 'd:\test.dat';

    input  x1-x4;

    sum=x1+x2+x3+x4;

    run;

    五、通过已经存在的SAS数据集创建新的SAS数据集



    从数据集EX创建数据集EX1

    data ex1;

      set ex;

    将两个数据集d1和d2中的观测值纵向连接起来建立新的数据集d3,可编辑语句:

    data d3;

    set d1 d2;

    六、SAS数据库

    所处理的数据文件必须放在SAS数据库中。所谓SAS数据库是指一个或几个SAS文件集合。

    指定库名

    libname  库名"文件夹的位置";

    临时库只有一个,名为work,其中的文件退出SAS后会被自动删除。

    七、sas语法基础

    1、SAS常量

    1. 数值常量
    2. 字符常量 "Hello" 'zhangli'
    3. 日期、时间、日期时间常量:后接D,T,DT如
    4. '1JAN2000'D   '9:25:19'T    '1JAN2000:10:30:05'DT

    七、常用语句

    1、cards语句

    cards语句的作用是与“;”呼应,标志数据行的开始与结束。

    格式为

    CARDS;

    数据行

    使用CARDS语句,后面必须紧跟数据行,并且在一个数据步中最多只能有一个CARDS语句。

    2、input语句

    INPUT语句作用是描述输入记录中的数据,并把输入值赋给相应的变量。其格式为

    INPUT 数据的变量名、数据及类型;

    默认读入的是数值型变量的值,除非在INPUT变量名后有串符号,或用字符的输入格式表示,或该变量事先已被定义为字符串。

    INPUT采取列表输入的方法,各个变量的值由空格分隔,为从一行读取多个观测值(每一行称为一个观测,每一列称为一个变量),应使用行保持符@@限制读取数指针,使其保持在这一行上读数,直到数据读完为止。例如下面将读取3行

    input X Y @@;

    cards;

    3.16     2.9     5.8     3     4.9    4.17

    3、merge 将两个数据集中的各个观测值横向合并并建立新的数据集

    data d3;

    merge d1 d2;

    编程实例

      data d1;                                                                                                                              
    input a b c @@;                                                                                              
    cards;                                                                                                                           
    1 5 7 1 7 9 1 3 4 1 2 6                                                                                       
    ;                                                                                                                                       
    data d2;                                                                                                         
    input X Y  Z @@;                                                                                        
    cards;                                                                                                              
    2       4       8       2       6       6                                                               
    ;                                                                                                           
    data d3;   
    merge d1 d2;                                                                                         
    proc print;                                                                                                                             
    run;                                                                                                                                    
             
    


    4、DROP语句

    DROP 语句的作用是指定不写到数据集中的变量

    DROP  变量名表;

    编程实例

      data d1;                                                                                                             
    input a b c @@;                                                    
    cards;
     1 5 7 1 7 9 1 3 4 1 2 6                                                           
    ;                                                                                                                                       
    data d2;                                                   
    input X Y  Z @@; cards;
    2       4       8       2      6    6 
    ;                                                                                                   
    data d3;  
    merge d1 d2;  
    proc print;                                                                                                                             
    run;                                                                                                                                    
             
    


    5、KEEP语句

    与drop正好相反,在DATA步中,出现在KEEP的保留,其他删除

    data chengji;                                                                                                                           
    input name$ chineses maths @@ ;                                                           
    keep name total; total=chineses+maths;                                                                                                                   
    cards;                                                            
    a 82   78 b 90 78 c 79 86                                                                      
    ;                                                                                                                                       
    proc print;                                                                                                                             
    run;                                                                                                                                    
             
    


    6、DATA步中,if语句,真继续处理否则返回到DATA步开始,不处理当前的观测值,不执行DATA步中的语句。

    编程实例:

    data chengji;  
    input name$ chineses maths @@ ;                                                       
    total=chineses+maths; 
    if total>=162 then output; 
      else put 'total<162';   cards;                                                                                                              a 82   78 b 90 78 c 79 86                                                                           
    ;                                                                                                                                       
    proc print;                                                                                                                             
    run;                                                                                                                                                                                                                                                           
    


    7、PROC语句

    作用是指定需要调用的过程及该过程的若干选项、

    PROC 过程名;

    例如,调用PRINT过程,打印数据集EX的内容:

    PROC PRINT DATA=EX;

    在PROC步中,必须确认一些最基本的信息,包括:

    1. 处理的数据集名,格式为DATA数据集名.
    2. 所涉及的变量名,格式为VAR名.
    3. 分组处理的标志,格式为BY组变量名.

    8、CLASS语句

    CLASS的作用是在分析的过程中定义分类变量,再按分类变量的值分别进行数据分析。其格式为

    CLASS 变量名;

    CLASS语句对数据分析所起的作用类似BY语句,但是它们打印输出的格式不相同,并且BY语句要求先对变量排序后才能使用。

    9、FREQ语句

    FREQ  语句的作用是规定一个变量,以它的值作为数据集中观测值出现的频数(frequence)。

    FREQ语句的格式:

    FREQ 变量;

    假定某观测值的FREQ变量的值为n,在分析时,该数据集中这个观测值出现的频数便是n.若n<1,则观测值不参加分析.若n不是整数,则自动取整。观测值的总数等于FREQ变量的和。

    编程实例

    data student;  
    input x y @@;  cards;                                                                                                                              8 9 3 8 5 3 7 9 9                                                                                            
    ;                                                                                                                                       
    proc means;                                                                                                                             
    freq y;                                                                                                                        
    run;                                                                                                      
    

    y值为频率

    SAS中的一些基本服务过程

    1print

    PROC PRINT[选择项];

    VAR 变量表;

    BY 变量表;

    SUM 变量表;

    选择项可能有DATA=数据集名

    SUM语句被用来求变量表中诸变量的总和.

    2、sort过程

    PROC SORT[选择项];

    BY 变量表;

    选择项可能为:

    ①DATA=数据集名

    用来说明要排序的数据集名,如果省略这一选择,则指定最新建立的数据集.

    ②OUT=数据集名

    用来说明要输出的数据集名,如果省略这一选择,则原来的数据集被输出的数据集替换。

    data ex;length name$9
    input name sex$ group$ t1-t3 @@;
    s=sum(of t1-t3)
    cards
    wangdong 1 1 90 70 60 xueping 2 2 85 95 88
    zhouhua 1 1 77 84 69 heyan 1 2 95 78 88
    sunhong 2 3 89 97 87 zhaobin 2 3 66 98 86
    huangshan  2 3 67 75 76 hufang 1 2 78 77 69
    lili  2 2 70 82 63 zhaoli 2 3 95 90 91
    zhangqun 1 1 93 91 89  iping 1 3 59 88 93
    liyun 1 1 89 96 76 liyu 2 1 79 89 87
    huajin 2 2 89 97 80
    ; 
    proc sort;
    by group sproc print;
    by group; run; 

    这里是按s升值进行排序,若要降序,需在s前加DESCENDING

    3、FORMAT过程

    PROC FORMAT;

        VALUE 格式名 格式的定义;

    为便于识别,格式名通常是原变量名加FMT,如果原变量是字符串,则应当在格式名前加串符号。后面的过程中,如果涉及某变量的输出格式,必须有语句:

    FORMAT 变量名 格式名;

    data ex;length name$9;                                                                                                    
    input name sex$ group$ t1-t3 @@;                                                                                        
    s=sum(of t1-t3);                                                                                                           
    cards;                                                                                                                                  
    wangdong 1 1 90 70 60 xueping 2 2 85 95 88                                                                               
    zhouhua 1 1 77 84 69 heyan 1 2 95 78 88                                                                                    
    sunhong 2 3 89 97 87 zhaobin 2 3 66 98 86                                                             
    huangshan  2 3 67 75 76 hufang 1 2 78 77 69                                               
    lili  2 2 70 82 63 zhaoli 2 3 95 90 91                                                   
    zhangqun 1 1 93 91 89   iping 1 3 59 88 93   
    liyun 1 1 89 96 76 liyu 2 1 79 89 87huajin 2 2 89 97 80      
    ;                                                                                                                                       
    proc format;                                                                                                                            
    value $sexfmt'1'='m' '2'='f';                                                                                        
    value $groupfmt'1'='a' '2'='b' '3'='c';                                                                          
    value t1fmt 0-<60='C'-<80='B'80-100='A';                                                                           
    proc print;                                                                                                                 
    format sex      $sexfmt.;                                                                                               
    format group $groupfmt.;                                                                                                  
    format t1 t1fmt;                                                                                                   
    format t2 t3 4.1;run;   
    

    4、STANDARD过程

    PROC STANDARD[选择项];

    VAR 变量表;

    FREQ 变量表;

    BY 变量表;

     

    5、TRANSPOSE过程

    PROC STANDARD[选择项];

    VAR 变量表;

    BY 变量表;

     

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值