全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1447 11
2014-10-16
悬赏 100 个论坛币 已解决
复制代码
复制代码



希望得到的数据集(变量为字符型),同时site1 site2 site4三个变量的label为bbb数据集中对应的取值aa bb cc:
name    site1       site2          site4
a           10           20            30 31
b         11 12        21             32
c           13         22 23           33   


如何简单的编程实现,谢谢!



最佳答案

pobel 查看完整内容

如果每个site里的name取值的顺序都相同的话: data ccc; set aaa end=last; by site name notsorted; if _n_=1 then call execute("data ddd(keep=name site: drop=site); merge "); if first.site then call execute(cats("ccc(where=(site=",site,") rename=(_x1=site",site,"))")); if last then call execute("; by name_order; run;"); if first.site then name_order=0; if first.name then do; ...
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-16 15:23:14
dxystata 发表于 2014-10-16 20:50
如果数据集aaa是这样,如何保持数据集中ccc中name取值的顺序为aaa数据中name的顺序c a b
如果每个site里的name取值的顺序都相同的话:
data ccc;
   set aaa end=last;
   by site name notsorted;

        if _n_=1 then call execute("data ddd(keep=name site: drop=site); merge ");
        if first.site then call execute(cats("ccc(where=(site=",site,") rename=(_x1=site",site,"))"));
        if last then call execute("; by name_order; run;");

        if first.site then name_order=0;
    if first.name then do; _x1=catx(" ",x1); name_order+1; end;
    else if not first.name then _x1=catx(" ",_x1,x1);
    if last.name;
    retain _x1 ;
run;

proc sql noprint;
   select distinct cats("site",site,"=",quote(strip(x))) into : label separated by " " from bbb;
quit;

proc datasets;
   modify ddd;
   label &label;
run;
quit;
二维码

扫码加我 拉你入群

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

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

2014-10-16 16:22:18
proc sort data=aaa;
    by name site g;
run;

data ccc;
        set aaa;
        by name site g;
        if first.site then _x1=catx(" ",x1);
        if not first.site then _x1=catx(" ",_x1,x1);
        retain _x1;
        if last.site;
run;


proc transpose data=ccc out=ddd(drop=_:) prefix=site;
   by name;
   var _x1;
   id site;
run;


proc sql noprint;
   select distinct cats("site",site,"=",quote(strip(x))) into : label separated by " " from bbb;
quit;

proc datasets;
   modify ddd;
   label &label;
run;
quit;
二维码

扫码加我 拉你入群

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

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

2014-10-16 16:46:17
修改标签部分与楼上相同,前半部分可以两次转置:
proc transpose data=aaa out=ccc;
var x1;
by name site;

run;
quit;

data ccc1(keep=name site c);
set ccc;
if col1^=. and col2^=. then c=cat(put(col1,z2.),"",put(col2,z2.));
else c=col1;
run;
proc transpose prefix=site data=ccc1 out=ccc2;
var c;
by name ;
id site;
run;
quit;
二维码

扫码加我 拉你入群

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

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

2014-10-16 20:50:06
pobel 发表于 2014-10-16 16:22
proc sort data=aaa;
    by name site g;
run;

data ccc;
        set aaa;
        by name site g;
        if first.site then _x1=catx(" ",x1);
        if not first.site then _x1=catx(" ",_x1,x1);
        retain _x1;
        if last.site;
run;


proc transpose data=ccc out=ddd(drop=_:) prefix=site;
   by name;
   var _x1;
   id site;
run;


proc sql noprint;
   select distinct cats("site",site,"=",quote(strip(x))) into : label separated by " " from bbb;
quit;

proc datasets;
   modify ddd;
   label &label;
run;
quit;
复制代码
如果数据集aaa是这样,如何保持数据集中ccc中name取值的顺序为aaa数据中name的顺序c a b
二维码

扫码加我 拉你入群

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

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

2014-10-16 20:51:01
magician1943 发表于 2014-10-16 16:46
修改标签部分与楼上相同,前半部分可以两次转置:
proc transpose data=aaa out=ccc;
var x1;
by name site;

run;
quit;

data ccc1(keep=name site c);
set ccc;
if col1^=. and col2^=. then c=cat(put(col1,z2.),"",put(col2,z2.));
else c=col1;
run;
proc transpose prefix=site data=ccc1 out=ccc2;
var c;
by name ;
id site;
run;
quit;
复制代码
如果数据集aaa是这样,如何保持数据集中ccc中name取值的顺序为aaa数据中name的顺序c a b
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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