2014年8月6日 星期三

Delete等於的records,就是保留不等於的records??

希望留下 Sex 和 disnn2 都不為 Missing的部分,但因為在「趕時間」,再轉換IF-then-else 與 SET 裡的 where 時,很直覺地把,IF-then-else 裡的 Delete「等於的」records,改為SET 裡的 Where 保留「不等於」的records
真能如此嗎?

有一組資料如下

Sex disnn2 i
. . 1
. 0 2
. 1 3
1 . 1
1 0 2
1 1 3
2 . 1
2 0 2
2 1 3
目標:留下 Sex 和 disnn2 都不為 Missing的部分
轉譯:
1. Sex 或 disnn2 有Missing 就該刪
【直接轉換 Missing—>不是Missing,刪—>留】
2. Sex不是Missing 或 Disnn2不是Missing就要留
方法
結果
data t1 ; set n_copy;
if sex=. or disnn2 =. 
                  then delete ;
put sex disnn2;
run;
1 0
1 1
2 0
2 1
data test1 ; set n_copy;
if sex^=. or disnn2 ^=.  ;
put sex disnn2;
run;
. 0
. 1
1 .
1 0
1 1
2 .
2 0
2 1
正確的應該再多一道手續,OR 轉為 AND
方法
結果
data t2 ; set n_copy;
if sex^=. and disnn2 ^=.  ;
put sex disnn2;
run;
1 0
1 1
2 0
2 1

沒有留言: