作者MmmRrrrX (銀色的靈魂)
站內Statistics
標題Re: [程式] sas count轉換問題
時間Sat Jan 1 17:23:12 2011
※ 引述《lsshno1 (朝右邊鋒邁進)》之銘言:
: 各位好,想請問一下, 下列想法如何做到呢?
: 資料型態:
: date zip_code
: 1/1 111
: 1/1 103
: 1/1 111
: 1/1 108
: 1/2 309
: 1/2 111
: 1/2 103
: .
: .
: .
: 12/31 103
: 12/31 111
: 希望整理資料下列形式:
: data 103 108 111 309
: 1/1 1 1 2 0
: 1/2 1 0 1 1
: .
: .
: .
: 12/31 1 0 1 0
: 也就是說,希望算出每日有多少個不同的zip_code. var變數名稱就是zip_code
: 想法:
: 我開始是想用sql解決:
: proc sql;
: create table output as
: select date,zip_code,count(zip_code) as count
: from date
: group by date,zip_code
: ;
: quit;
: output輸出如下:
: date zip_code count
: 1/1 103 1
: 1/1 108 1
: 1/1 111 2
: .
: .
: 12/31 103 1
: 12/31 111 1
: 感覺只差一步可是就是想不出來!
: 感激各位了!
/*這裡的結果跟你使用SQL是一樣的*/
proc sort data=yourdata;
by date zip_code;
run;
proc univariate data=yourdata noprint;
by date zip_code;
var zip_code;
output out=a1 n=n;
run;
/*轉成你要的樣子,印象中SAS變數不能全數字,prefix=a 讓變數為 a'ooo' */
proc transpose out = new data=a1 prefix=a;
by date ;
id zip_code;
var n;
run;
/*可有可無,讓表好看點*/
data new;
set new;
drop _NAME_ _LABEL_;
run;
離你的要求還差一步,沒值的部份顯示為. ,而不是 0
不知道SAS能不能不管變數,只要是.一率取代為 0
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.224.45
→ liton:這你有真的跑過?? 01/01 18:32
→ liton:幹麻多個univarite? 01/01 18:40
→ MmmRrrrX:只是因為SQL不熟,用univariate output n= 算個數 01/01 18:43
→ liton:ERROR: Variable zip_code in list does not match type 01/01 18:47
→ liton:prescribed for this list. 01/01 18:48
→ liton:好像不能跑 01/01 18:48
我把我實驗的程式po出來,資料只用前兩天,也懶的設成日期的格式
data yourdata;
input date zip_code;
cards;
1 111
1 103
1 111
1 108
2 309
2 111
2 103
2 103
;
proc sort data=yourdata;
by date zip_code;
run;
proc univariate data=yourdata noprint;
by date zip_code;
var zip_code;
output out=a1 n=n ;
run;
proc transpose out = new data=a1 prefix=a;
by date ;
id zip_code;
var n;
run;
data new;
set new;
drop _NAME_ _LABEL_;
run;
※ 編輯: MmmRrrrX 來自: 218.172.224.45 (01/01 18:51)
推 wlsherica:SAS可以將.一律取代0 01/01 18:50
※ 編輯: MmmRrrrX 來自: 218.172.224.45 (01/01 18:55)
推 lsshno1:感謝各位前輩,我差在traspose中的id zip_code. 謝謝! 01/01 19:01