作者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
1F:→ liton:这你有真的跑过?? 01/01 18:32
2F:→ liton:干麻多个univarite? 01/01 18:40
3F:→ MmmRrrrX:只是因为SQL不熟,用univariate output n= 算个数 01/01 18:43
4F:→ liton:ERROR: Variable zip_code in list does not match type 01/01 18:47
5F:→ liton:prescribed for this list. 01/01 18:48
6F:→ 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)
7F:推 wlsherica:SAS可以将.一律取代0 01/01 18:50
※ 编辑: MmmRrrrX 来自: 218.172.224.45 (01/01 18:55)
8F:推 lsshno1:感谢各位前辈,我差在traspose中的id zip_code. 谢谢! 01/01 19:01