全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1607 6
2011-10-06
帮忙用数组写一个类似EXCEL数据透视的程序,谢谢!原dataset A
Worker Year Code
001 1944 B
002 1948 E
003 1947 C
005 1945 A
006 1948 D

目标DATASET B
Year    A               B C D E
1944  N(个数)...
1945  ..
1946  ..
...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-10-6 15:37:15
data a;
input (Worker  Year  Code) ($)  ;
cards;
001 1944 B
002 1948 E
003 1947 C
005 1945 A
006 1948 D
007 1949 A
008 1953 B
009 1950 C
010 1950 B
;
run;

/*依年份对不同的code计数*/
proc sql;
create table b as
select worker,year,code,
       count(code) as cnt
from a
group by year;
quit;
/*转置,数据结构变换*/
proc transpose data=b out=c;
   by year code notsorted;
   var cnt;
run;
proc transpose data=c out=d;
   by year _name_ ;
   id code;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-6 17:07:42
谢谢给出的解答,可以实现。
对数组缺少理解,想通过数组实现,但通过下面程序显然是出错了,求正解!谢谢!
data look_up;
array level{1944:1950,5} _temporary_;
retain level 0;
set new;
job=input(translate(jobcode,'123','ABC'),1.);
year=year(date);
if _n_=1 then
do year=1944 to 1950;
do job=1 to 3;
level{year,job}=level{year,job}+1;
year=year;
if job=1 then a=level{year,job};
else if job =2 then b=level{year,job};
else c=level{year,job};
end;
end;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-6 22:31:54
freezeyouth 发表于 2011-10-6 17:07
谢谢给出的解答,可以实现。
对数组缺少理解,想通过数组实现,但通过下面程序显然是出错了,求正解!谢谢 ...
其实你的差不多都是对的。我想还可以这样:
复制代码
京剧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-8 09:00:19
那个透视表的话还可以用tabulate吧......
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-10-9 09:19:59
京剧大师的程序里有个typo:level[1944:1953, 5]。要不出界了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群