全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3089 12
2015-08-12
悬赏 50 个论坛币 已解决
·现在想把一个数据库中变量的值都作为行做一个对应矩阵(观测中有该元素,对应值为1,无则为0),原数据如下:
IDy1y2y3
1AVE
2G
X
3ACR

变换后数据结果如下:
IDAVEGXCR
11110000
20001100
31000011

请问如何操作?谢谢!

最佳答案

chiant 查看完整内容

here is my solution. data a; input ID y1 $2. y2 $2. y3 $2.; cards; 1 A V E 2 G X 3 A C R run; %macro trans_data; proc sql noprint; select y into: value1- from (select distinct y1 as y from a where y1 is not null union select distinct y2 as y from a where y2 is not null union select distinct y3 as y from a w ...
二维码

扫码加我 拉你入群

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

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

全部回复
2015-8-12 09:47:03
here is my solution.

data a;
     input ID y1 $2. y2 $2. y3 $2.;
     cards;
1 A V E
2 G   X
3 A C R
run;

%macro trans_data;
     proc sql noprint;
           select y into: value1-  from
           (select distinct y1 as y from a where y1 is not null
                union select distinct y2 as y from a where y2 is not null
                union select distinct y3 as y from a where y3 is not null)
           ;
     quit;
     data a_new;
           set a;
           array yvar y1-y3;
           %do i=1 %to &sqlobs.;
                &&value&i=0;
           %end;
           do over yvar;
                select(yvar);
                     %do i=1 %to &sqlobs.;
                           when("&&value&i")  &&value&i=1;
                     %end;
                     otherwise;
                end;
           end;
           drop y1-y3;
     run;
%mend;
%trans_data;

二维码

扫码加我 拉你入群

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

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

2015-8-13 03:21:00
It works, but is not efficient for a big data.
data a;
input ID y1 $2. y2 $2. y3 $2. ;
cards;
1 A V E
2 G   X
3 A C R
run;
data b (keep=ID A V E G X C R);
set a;
array aa{*} A V E G X C R;
array bb{*} y1-y3;
do i=1 to dim(aa);
        aa=0;
        do j=1 to dim(bb);
                if bb[j]=vname(aa) then do;
                        aa=1;
                        leave ;
                end;
        end;
end;
run;
二维码

扫码加我 拉你入群

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

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

2015-8-13 05:16:11
teqel 发表于 2015-8-13 03:21
It works, but is not efficient for a big data.
data a;
input ID y1 $2. y2 $2. y3 $2. ;
Your code is not only inefficient, but also inflexible. It's not good idea to hard-code the data value (A, V, E, ..., R).
二维码

扫码加我 拉你入群

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

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

2015-8-13 13:25:52
chiant 发表于 2015-8-13 05:17
here is my solution.

data a;
朋友你的代码确实灵活,但是用distinct这种需要排序的statement外加连用3个select from,要是遇到大一些的数据,也是挺“呵呵”的……
二维码

扫码加我 拉你入群

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

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

2015-8-13 16:31:50
sniperhgy 发表于 2015-8-13 13:25
朋友你的代码确实灵活,但是用distinct这种需要排序的statement外加连用3个select from,要是遇到大一些的 ...
ok, 那您有本事给个大数据的solution呗
二维码

扫码加我 拉你入群

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

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

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

分享

扫码加好友,拉您进群