- 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建立的變項,自動變項
沒有留言:
張貼留言