全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1065 2
2012-11-24

数据结果如下
data a;
input t m w s@@;
cards;
5.77 366.3 931 25
5.77 366.1 601 24
5.78 173.2 47 1
5.78 173.2 374 2
5.78 173.2 68 3
5.78 173.2 607 24
5.78 173.2 967 25
5.78 173.2 682 23
0.88  304   342  24
;
run;
想要把这样的数据转换成如下的数据形式
t         m                s1   s2   s3   s4   s5   s6   fred
5.77   366.3           a     a     a    a     p    a    1
5.77   366.1          a     a     a     p   a      a     1
5.78   173.2           p    p    p     p   p      p     6
0.88    304             a    a    a     p    a     a      1
其中s1=1 s2=2 s3=3 s4=24 s5=25 s6=23;若变量s=s1,则在s1下注字母p,同时在s2 s3 s4 s5 s6下注字母a,若t和m相等,则在一行中按各自的s值在s1,s2,s3,s4,s5,s6下标p或a。变量freq以变量t和m计算。
刚学程序,高手相助,感激不尽





二维码

扫码加我 拉你入群

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

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

全部回复
2012-11-24 14:05:11
重复贴子吧!
https://bbs.pinggu.org/forum.php? ... &page=2#pid15604613
加个数组赋值和去掉重复的操作就行的。
data b;
        set a;
        array ss{*} ss1-ss6 (1 2 3 24 25 23);
        array sc2 {*} $2. s1-s6;
                do i=1 to 6;
                        if s=ss{i} then sc2{i}='p';
                                else  sc2{i}='a';                                
                        end;
        output;
        drop ss1-ss6 i;
run;
proc sql;
        create table c as
        select *,count(t) as fred
        from b
        group by t,m;
quit;
data d(drop=i);
        set c;
        by t m;
    array char {*} _character_;
            do i=1 to 6;
                if not (first.m and last.m) then char{i}='p';
                else char{i}=char{i};
        end;
run;
data e(drop=w s);
        set d;
        by t m;
        if first.m then output;
        else delete;
run;
二维码

扫码加我 拉你入群

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

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

2012-11-25 16:58:01
谢谢,我刚学用SAS!谢谢您的指导!
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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