• 【SAS BASE】处理数据集


     本节内容包括:SET语句、MERGE语句、UPDATA语句、OUTPUT语句、TRANSPOSE语句和data-set选项及SAS Automatic Variables

    一、SET语句(堆叠功能)

    • 用SET语句修改数据集
    DATA Friday;
        SET Sales;/SET 'C:MySASLIB	rains.dat';
        IF DAY='F';
        Total=Propcorn+peanuts;/*建立新的变量*/
    RUN;
    • 用SET语句堆叠(stack)数据
    1 DATA BOTH;
    2     SET Southerntrance Northerntrance;
    3 RUN;
    • 用SET语句Interleaving数据集:不仅堆叠在一起,还按照BY变量排序
    1 DATA interleave;
    2    SET Northerntrance Southerntrance;
    3    BY passnumber;
    4 RUN;
    5 /*注意:用于堆叠的数据集必须要预先根据BY变量排序*/
    •  Combing a Grand Total with the Original Data
       1 *省略DATA步;
       2 PROC MEANS NOPRINT DATA=shoes;
       3     VAR Sales;
       4     OUTPUT OUT=Summarydata SUM(Sales)=GrandTotal;
       5 /*MEANS过程生成一个含有总和的新数据集,但是无法与原始数据匹配,因为没有共同的变量*/
       6 PROC PRINT DATA=Summarydata;
       7     TITLE 'Summary Data Set';
       8 RUN;
       9 
      10 *Combing a GrandTotal with the original data;
      11 DATA Shoesummary;
      12     IF _N_=1 THEN SET Summarydata;/*Summarydata数据集观测数为1*/
      13      SET shoes;/*原始数据的观测数超过1*/
      14      PERCENT=sales/Grandtotal*100;
      15 RUN;
      16 /*与RETAIN语句的效果类似*/

    二、MERGE语句(匹配功能)

    • One to One Match Merge
      1 DATA Cholocates;
      2     MERGE sales descriptions;
      3     BY codenum;
      4 RUN;
      5 【NOTICE】:
      6 1.在MERGE之前要预先按BY变量排序;
      7 2.若两个数据集有相同名字的非BY变量,则后面的会覆盖前面数据集。
    • One to Many Match Merge(用data-set-1的一个观测时匹配data-set-2的多个观测,原理与One-to-One一样)
    • Mering Summary Statistics with the Original Data
      1 step1: 利用PROC MEANS归纳数据,并将输出放入新数据集中;
      2 step2: 将新数据集与原始数据集匹配。

       

    三、Data-set Options(最常用的帮助处理数据集的选项)

    1 KEEP=variable-list;
    2 DROP=variable-list;
    3 RENAME=(oldvar=newvar);
    4 FIRSTOBS=n;
    5 OBS=n;
    6 LABEL=‘data-set-label’;
    7 IN=new-var-name;*creating a temporary variable for tracking whether that data set contributed to the current observation;
    8 WHERE=condition;

    【备注】:IN=variable为临时变量,仅在当前DATA步存在,值为0或1。

    四、用UPDATE语句更新主数据集

    1 DATA perm.patientmaster;
    2     UPDATE perm.patientmaster transactions;
    3   *解释:---------主数据集-----------更新数据集---4     BY Account;
    5 RUN;
    6 【NOTICE】:
    7 更新数据集的缺失值不会覆盖前一个主数据集;
    8 主数据集中的BY变量的值必须是unique;

    五、OUTPUT语句

    • 将一个数据集横向分为多个数据集(若仅用DATA步,(例如:DATA Lions Tigers Bears;),导出来的数据集是一样的)
    1 DATA Moring Afternoon;
    2     INFILE 'C":MyRawdatazoo.dat';
    3     INPUT Animal $ 1-9 Class $ 11-18 Enclosure $ Feedtime $;
    4    *省去数据部分;
    5    IF FeedTime='am' THEN OUTPUT Moring;
    6         ELSE IF Feedtime='pm' THEN OUTPUT Afternoon;
    7         ELSE IF Feedtime='both' THEN OUTPUT;/*输入到两个数据集中*/
    8 RUN;
    • 将一个数据集的一行观测分为多个
     1 DATA Theaters;
     2     INFILE 'C:MyRawDatamovies.dat';
     3      INPUT Month $ Location $ Tickets @;
     4      OUTPUT;
     5      INPUT Location $ Tickets @;/*因为没有遇到第二个input语句,此时Month还停留在上一句的Month处*/
     6       OUTPUT;
     7       INPUT Location $ Tickets;
     8       OUTPUT;
     9 RUN;
    10 /*此program将每个观测(7列),拆成三行(每行三列,且没三行都以第一行的Month的值为准)*/

    六、TRANSPOSE语句(将观测与变量互换)

    1 PROC TRANSPOSE DATA=baseball OUT=flipped;
    2     BY Team Player;/*Grouping variable*/
    3     ID type;/*ID 语句names the variable whose formatted values will become the new variable names;若为数值型的,则新变量名会有一个下划线前缀;ID变量的值必须是Unique*/
    4     VAR Entry;/*想要transpose的变量*/
    5 RUN'

    七、SAS Automatic Variables

    1) _N_ :DATA步中SAS的循环次数;
    2)_ERROR_:取值0(无错误)和1(有错误);
    3)FIRST.variable:当SAS在读取该变量时,首次出现一个value,则为1,否则为0;
        LAST.variable:当SAS在读取该变量时,最后出现一个value,则为1,否则为0;
    【注意】:FIRST.variable和LAST.variable:仅在DATA步中用了BY语句才有些。
  • 相关阅读:
    Golang中用==判断是否相等
    reactnative项目运行失败的解决方法
    使用Redis实现分布式锁
    Zksnarks笔记: from programe to QAP
    [loj6696]复读机 加强版
    [loj3561]The short shank; Redemption
    [atARC135D]Add to Square
    [atARC134F]Flipping Coins
    [loj2157]避雷针
    [loj3653]抽奖机
  • 原文地址:https://www.cnblogs.com/chenyn68/p/3867817.html
Copyright © 2020-2023  润新知