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;
谢谢给出的解答,可以实现。
对数组缺少理解,想通过数组实现,但通过下面程序显然是出错了,求正解!谢谢!
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;