2014年4月26日 星期六

結合SAS Data Set

結合SAS Data Set
  • One-to-one merging (應該改很少用 @@)
    • 新資料檔有所有的變項,兩資料檔的數據依序進入 PDV,因此相同變項時,第1資料檔會被覆寫,保留第 2資料檔的數據。
    • Observation 只留「最少」資料檔的筆數。PDV 會進第1資料檔的第3筆,但是讀第2資料檔時會遇到 end-of-file,PDV就停止進資料,也不會輸出到新檔案中。
    • 用 Set
    • Data ab ;
      set a ;
      set b ;

      run;
      • Data-set-A 
        Num    X
        1          10
        2          15
        3          20
      • Data-set-B 
        Num       Y
        11           6
        13          12
      • Combined Data-set
        Num    X        Y
        11       10        6
        13       15       12
    • Data ab ; Merge a b; 則是會保留「最多」的Observation。
  • Concatenating 垂直連接,成為新資料檔
    • 新資料檔有所有的變項,也有所有的 Observation
    • 同變項,要有相同的 attribute,若是 type 不同( NUM 與 Char) 會有 Error;若是同屬性,但length, Label, format, informat 不同,會以先讀入的為主。
    • 用 SET 
    • Data ab ;
      set  a  b;
      run;
      • Data-set-A 
        Num    X
        1          10
        2          15
        3          20
      • Data-set-B 
        Num    Y
        11           6
        13          12
      • Combined Data-set
        Num    X        Y
        1          10        .
        2          15        .
        3          20        .
        11            .         6
        13            .        12
  • Appending 附加,以原來 BASE為主,加在尾部
    • PROC APPEND                            
                 BASE=Base-data-set          DATA=Second-data-set  FORCE;
      RUN;
    • 將 Second-data-set 的數據是加在 Master( Base) data-set 的尾部,沒有產生新 data-set,也不去讀取  Master( Base) data-set。
    • 一次 Procedure 只能處理 2 個資料檔,Base 與 Second。
    • 若 Second-data-set  的變項 有下列情況,要用 FORCE option;
      • 有新的變項,不在 Base-data-set 裡
        • Base沒有的變項會被 drop。
      • 同名變項 的 type 不同, length 不同。
        • 維持 Base 的type, Second-data-set的數據變missing;
          維持 Base 的Length,Second-data-set的數據被刪截;
  • Interleaving 插入數據 ( Concatenating 加入 BY )
    • 所有資料必須先 Sort in Ascending order.
    • Set, By
      Data ab ; set a b ; by num; run;
      • Data-set-A
        Num     X
        1          10
        2          15
        3          20
      • Data-set-B
        Num     X   Y
        1           6    6
        3          12   12
      • Combined Data-set
        Num     X    Y
        1          10     .
        1            6     6
        2          15     .
        3          20     .
        3          12    12
  • Match-merging
    • MERGE, BY
      • 最好都先排序成 Ascending order,By值是missing排在頂,Execution Phase: PDV會依照BY值序順進行比對。
      • 變項屬性以第 1個資料檔為主,但變項值則會被後到的資料 overwritten。
      • 變項改名字
        • Data-set ( RENAME= ( old-variable-name=new-variable-name ) ) 
    • Excluding Unmatched Observations
      • (IN= data set option) 與 If statement,產生 temp_a, temp_b 兩個 temporary variable,再利用 If statement 進行篩選所要輸出的資料檔
        • 全部資料都留
          Data Mab ;
          merge  a ( in= temp_a)   b ( in=temp_b  rename=(x=new_x) );
          by Num;
          If     temp_a or temp_b  ;    *或者不寫 If statement;
          run;
        • 只留完全 match ,AB兩資料檔都有的,把 if 段改如下
          If     temp_a and  temp_b  ;
          或者
          If     temp_a =1 and  temp_b  =1 ;
        • 保留只在 A  或是 只在 B的
          If     temp_a ;
          If     temp_b  ;

沒有留言: