close
很多人在處理資料的時候會有一個需求,就是希望同一欄位的值會等於上一個CASE的值。
例如這樣一筆資料
Obs | ID | year |
1 | A | 2001 |
2 | . | 2002 |
3 | . | 2003 |
4 | . | 2004 |
5 | B | 1993 |
6 | . | 1994 |
7 | . | 1995 |
8 | C | 1996 |
9 | . | 1997 |
10 | . | 1998 |
11 | . | 1999 |
12 | . | 2000 |
.的地方表示「如上」,也就是說我們希望資料在處理後會長成
Obs | ID | year |
1 | A | 2001 |
2 | A | 2002 |
3 | A | 2003 |
4 | A | 2004 |
5 | B | 1993 |
6 | B | 1994 |
7 | B | 1995 |
8 | C | 1996 |
9 | C | 1997 |
10 | C | 1998 |
11 | C | 1999 |
12 | C | 2000 |
這個樣子那要怎樣讓那些.變成「如上」呢?
這時候就要運用RETAIN指令了
RETAIN的語法基本上是 RETAIN <需要「如上」的變項> <一開始代進去的數值>
以本例來說就是 RETAIN ID 0。
SAS處理資料是一次處理一行,retain ID 0的意思是說,
當SAS在處理ID這個變項的時候,手裡先拿著0,
如果該變項沒有數值(ID為MISSING的時候),就把手上的0放進去,
如果ID裡面有數值,就把手上的0丟掉,把碰到的數值拿在手上,
如果下一行的ID裡面沒有數值,就把手上的數值填進去。
當SAS讀進第一行
1 | A | 2001 |
因為ID裡面有個A,所以手上就會拿一個A,
2 | . | 2002 |
然後在處理第二行的時候,因為ID裡面沒有數值,就會把手上的A丟進去,變成
2 | A | 2002 |
這樣,然後帶著A前往下一行。
當SAS碰到
5 | B | 1993 |
這行的時候,因為ID裡面是不是MISSING,而是B,所以手裡會改拿B,前往下一行。
如此這般就會把所以MISSING照著「如上」的方式填滿囉~是個很常用到的功能唷。
全站熱搜