全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4674 8
2013-07-28
悬赏 60 个论坛币 已解决

转置.xls
大小:(10.5 KB)

 马上下载



Unnamed.jpg





刚才一贴被删了,,币都没返还。。,,积分换币不容易的。。
重发一下!!
希望好心人能帮忙解答下。。

最佳答案

stata18 查看完整内容

再稍微完善一点。期待其他朋友给出更完美的方案。 data a; input id week amount; cards; 1 2 56 1 2 56 1 2 7 1 4 656 1 4 34 1 6 33 1 7 34 2 1 43 2 1 3 2 1 3 2 4 3 2 5 2 2 5 234 3 2 3 3 ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-28 10:23:11
再稍微完善一点。期待其他朋友给出更完美的方案。

data a;
input id week amount;
cards;
1        2        56
1        2        56
1        2        7
1        4        656
1        4        34
1        6        33
1        7        34
2        1        43
2        1        3
2        1        3
2        4        3
2        5        2
2        5        234
3        2        3
3        2        22
3        2        34
3        7        4
3        7        32
;
run;
data b;set a;
/*
if first.id then n=0;
if first.id & first.week then n=1;
retain n;
if ^first.id & first.week then n+1;
by id week;
run;
data b;set b;
*/
if first.week then m=0;
m+1;
by id week;
run;

data b;set b end=lst;
if _n_=1 then max=m;
retain max;
if m>max then max=m;
if lst then call symput('max',left(max));
drop max;
run;
%put &max;

data ord;set a;
keep week;
run;
proc sort data=ord nodupkey;by week;run;
proc sql;select cat('week',week) into: wk separated by "," from ord;quit;
%put &wk;

%macro trans;
%do i=1 %to &max;
     data dsn;set b;
     if m=&i;
     run;
     proc transpose data=dsn out=dsn1 prefix=week;
                    by id m;id week;var amount;run;
     proc datasets lib=work;append base=t force data=dsn1;quit;
%end;
proc sql;create table res as select id,&wk from t order by id,m;quit;
%mend trans;
%trans;

“res.sas7bdat"就是最终结果。

二维码

扫码加我 拉你入群

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

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

2013-7-28 11:13:55
data a;
input id week amount;
cards;
1        2        56
1        2        56
1        2        7
1        4        656
1        4        34
1        6        33
1        7        34
2        1        43
2        1        3
2        1        3
2        4        3
2        5        2
2        5        234
3        2        3
3        2        22
3        2        34
3        7        4
3        7        32
;
run;proc sort data=a;by id week;run;
data b;set a;
if first.week then m=0;
m+1;
by id week;
run;

data b;set b end=lst;
if _n_=1 then max=m;
retain max;
if m>max then max=m;
if lst then call symput('max',left(max));
drop max;
run;
%put &max;

%macro trans;
%do i=1 %to &max;
     data dsn;set b;
     if m=&i;
     run;
     proc transpose data=dsn out=dsn1 prefix=week;
                    by id;id week;var amount;run;
     proc datasets lib=work;append base=t force data=dsn1;quit;
%end;
proc sort data=t(drop=_name_);by id;run;
%mend trans;
%trans;

二维码

扫码加我 拉你入群

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

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

2013-7-28 11:14:35
希望能帮到楼主。这个小程序虽不完美,但是可以解决上述问题。
二维码

扫码加我 拉你入群

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

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

2013-7-28 12:00:46
感谢下  
二维码

扫码加我 拉你入群

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

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

2013-7-30 10:22:49
data a;
input id week amount;
cards;
1        2        56
1        2        56
1        2        7
1        4        656
1        4        34
1        6        33
1        7        34
2        1        43
2        1        3
2        1        3
2        4        3
2        5        2
2        5        234
3        2        3
3        2        22
3        2        34
3        7        4
3        7        32
;
proc sort data=a out=a1;
by id week;
run;

data a2;
set a1;
by id week;
if first.week then m=0;
m+1;
run;
proc sql noprint;
select max(m) into: max
from a2;

select distinct cat('week',week) into : week separated by ','
from a2
order by 1;
quit;

%macro trans;
%do i=1 %to &max;
proc transpose data=a2 out=b&i(drop=_name_) prefix=week;
where m=&i;
by id;
var amount;
id week;
run;
%end;
data b;
set
%do i=1 %to &max;
b&i
%end;
;
run;
proc sort data=b;
by id;
run;

proc sql;
create table c as
select id, &week
from b;
quit;

%mend;
%trans
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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