2014年4月25日 星期五

SAS 資料處理技巧1

變項Keep 與 Drop
  • data work (drop=age group);
  • set clinic    (keep=age group BMI );
    • 讀檔時 (SET) 只進 age group BMI ,新資檔(DATA) 刪除 age group,最後輸出只有BMI


FIRST.變項 與 LAST.變項
  • 一定要先Proc Sort
  • Proc Sort 之後,遇到 Data ; by X Y;,在program data vector裡會自動建立FIRST.變項 與 LAST.變項,First.X Last.X First.Y Last.Y,可參考下表
Department FIRST.Department LAST.Department
A 1 0
A 0 0
A 0 1
B 1 0
B 0 1
C 1 1

範例如下:
data salaries2 ; set salaries ;
by Department;
/*第一筆設定為0*/ 
if first.Department then Payroll=0;
/*累加*/
      payroll+yearly;
/*是最後一筆再輸出*/
if last.Department;
run;

Using Direct Access:指定讀特定一筆數據,並輸出。(Point-Output-Stop)
  • Point 與 OUTPUT 聯用。通常用於取得Random sample。
    • data test;
          obsnum=3; /*自定變項與值*/
          set salaries  point=obsnum;  /* 被 point 變項就消失 */
          N=1;
          OUTPUT;  /*強制輸出到實體資料檔*/
          Stop;     /*找到某筆數據後,停止 iteration,不
                          必等到 Mark of the end */
      K=1;   /*因為在OUTPUT之後,數值不會被輸出*/
      run;

資料列末端的技巧 ( End=var )
  • 用途:輸出資料檔的最未一筆總計。(似乎用Last.即可)
  • End=var,建立暫時變項 var ,若 SET statemnet 讀到了 end of file,var就為1
  • END= 不與 POINT= 一起用
    • set sasuser.stress2(keep=timemin timesec) end=last;
    • .........
    • if last; /* 當 last = 1 才輸出 */

SAS DATA SET 的處理流程,與讀 Raw data file 差不多,主要差異如下:
  • Execution Phase:第一筆資料輸出到新資料檔後,會在 Program Data Vector裡 Retain 保留 SET statement 已讀入的 (如:第一筆資料) 與 sum statement 所產生的變項,一直到再執行 SET statement,讀入第二筆數據
    • 但讀 RAW DATA FILE 則是重設為 MISSING,除非是RETAIN, SUM STATEMENT變項, 暫時的ARRARY,FILE或INFILE的OPTION建立的變項,自動變項

沒有留言: