歡迎各位舊雨新知繼續支持小站
http://kenshin528.pixnet.net/blog
這裡將不再更新,謝謝
2010年3月12日 星期五
好用的「同上」--RETAIN指令
很多人在處理資料的時候會有一個需求,就是希望同一欄位的值會等於上一個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 |
2 | . | 2002 |
然後在處理第二行的時候,因為ID裡面沒有數值,就會把手上的A丟進去,變成
2 | A | 2002 |
這樣,然後帶著A前往下一行。
當SAS碰到
5 | B | 1993 |
如此這般就會把所以MISSING照著「如上」的方式填滿囉~是個很常用到的功能唷。
2009年9月17日 星期四
2008年12月15日 星期一
填問卷 拿獎金~經濟不景氣~外快多少賺~
有在上網的朋友應該都知道市面上有很多座談會吧。
每參加一次就有幾百塊的車馬費可以領取,但是因為篩選條件嚴格,不好進入,
而且必須積極留意相關訊息才有機會,因此雖然車馬費高,但是要能參加實在麻煩。
http://valuedo2.statusad.com/?sa=1064
點眾網是一家市調公司,當有市調活動時,只要你填寫的資料符合最初審核資格,他們會以EMAIL方式將相關問卷寄給您,平常也不會收到垃圾信,非常貼心。您只要每天打開EMAIL,就知道有沒有適合您的活動。每次填寫問卷也可以得到幾百塊的台幣當作報酬,相對於又要主動注意訊息,又要出門的座談會,點眾相對來說是人性化、方便許多。有興趣的朋友可以點上面的連結了解相關訊息唷~經濟不景氣,多少賺點外快吧!
每參加一次就有幾百塊的車馬費可以領取,但是因為篩選條件嚴格,不好進入,
而且必須積極留意相關訊息才有機會,因此雖然車馬費高,但是要能參加實在麻煩。
http://valuedo2.statusad.com/?sa=1064
點眾網是一家市調公司,當有市調活動時,只要你填寫的資料符合最初審核資格,他們會以EMAIL方式將相關問卷寄給您,平常也不會收到垃圾信,非常貼心。您只要每天打開EMAIL,就知道有沒有適合您的活動。每次填寫問卷也可以得到幾百塊的台幣當作報酬,相對於又要主動注意訊息,又要出門的座談會,點眾相對來說是人性化、方便許多。有興趣的朋友可以點上面的連結了解相關訊息唷~經濟不景氣,多少賺點外快吧!
2008年11月17日 星期一
合併檔案-Set and Merge
在處理資料的時候,常常需要合併不同資料檔。例如使用社會變遷資料庫時,社會變遷資料庫是一年做一次,需要跨年度比較的時候就會需要把兩個年度的資料合併。這時候就需要使用合併檔案的指令-set和merge。
set和merge都屬於data step,要在data step中才能運作。set和merge的差別在於,set是垂直合併檔案,增加case數量;而merge是水平連結,增加變項數量。
畫個圖給大家看就很清楚了。
我們先產生適用於SET的兩筆資料
data A;
input a b c;
cards;
1 2 3
2 3 4
3 46;
run;
data B;
input a b c;
cards;
4 6 6
5 7 7
6 8 8;
run;
當兩筆資料變項相同的時候,使用set會產生這樣的結果:
data AB;
set A B;
run;
merge使用上要比較注意,就是在水平連結的時候,通常會依照兩筆資料相同的變項來做水平連結增加變項。
先產生使用merge的兩筆資料
data A;
input a b c ;
1 3 4
2 5 6
3 6 7;
run;
data B;
input a d e;
cards;
1 5 5
2 6 6
3 7 7;
run;
proc sort data=A;
by a;
proc sort data=B;
by a;
/*因為下述merge會用到by來連結檔案 所以要先sort(排序)*/
data AB;
merge A B;
by a;
run;
打開sas試試看就知道囉~:)
set和merge都屬於data step,要在data step中才能運作。set和merge的差別在於,set是垂直合併檔案,增加case數量;而merge是水平連結,增加變項數量。
畫個圖給大家看就很清楚了。
我們先產生適用於SET的兩筆資料
data A;
input a b c;
cards;
1 2 3
2 3 4
3 46;
run;
data B;
input a b c;
cards;
4 6 6
5 7 7
6 8 8;
run;
當兩筆資料變項相同的時候,使用set會產生這樣的結果:
data AB;
set A B;
run;
merge使用上要比較注意,就是在水平連結的時候,通常會依照兩筆資料相同的變項來做水平連結增加變項。
先產生使用merge的兩筆資料
data A;
input a b c ;
1 3 4
2 5 6
3 6 7;
run;
data B;
input a d e;
cards;
1 5 5
2 6 6
3 7 7;
run;
proc sort data=A;
by a;
proc sort data=B;
by a;
/*因為下述merge會用到by來連結檔案 所以要先sort(排序)*/
data AB;
merge A B;
by a;
run;
打開sas試試看就知道囉~:)
2008年11月2日 星期日
訂閱:
文章 (Atom)