SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 621|回复: 3
打印 上一主题 下一主题

请问各位高手如何实现下面数据处理的程序,附有结果

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-5-25 12:45:10 | 只看该作者

请问各位高手如何实现下面数据处理的程序,附有结果

目的:是通过前面的2列输出后面的2列
算法:out1是级别中同一类别对应的在flag中年的和,如16对应的是4个一,out1=4,15后面对应的是2个1,out1=2
          out2 是级别中同一类别的个数,比如级别16有4个,级别15有4个,级别12有6个
    先谢谢啦

级别        flag                out1        out2
16        1                4        4
16        1                4        4
16        1                4        4
16        1                4        4
15        0                2        4
15        1                2        4
15        1                2        4
15        0                2        4
12        0                3        6
12        0                3        6
12        0                3        6
12        1                3        6
12        1                3        6
12        1                3        6
10        1                2        4
10        0                2        4
10        0                2        4
10        1                2        4
8        0                2        3
8        1                2        3
8        1                2        3
7        0                2        3
7        1                2        3
7        1                2        3
6        0                2        6
6        0                2        6
6        0                2        6
6        1                2        6
6        1                2        6
6        0                2        6
4        0                0        3
4        0                0        3
4        0                0        3
3        0                1        2
3        1                1        2
2        0                1        3
2        0                1        3
2        1                1        3
1        0                0        2
1        0                0        2
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-5-25 13:46:44 | 只看该作者

Re: 请问各位高手如何实现下面数据处理的程序,附有结果

[code:mr23ugi5]data raw(index=(level));
        input level flag std1 std2;
datalines;
16 1 4 4
16 1 4 4
16 1 4 4
16 1 4 4
15 0 2 4
15 1 2 4
15 1 2 4
15 0 2 4
12 0 3 6
12 0 3 6
12 0 3 6
12 1 3 6
12 1 3 6
12 1 3 6
;

data temp1;
        out1=0;
        out2=0;
        do _n_=1 by 1 until(last.level);
                set raw;
                by level;
                out1+flag;
                out2+1;
        end;
        do until(last.level);
                set raw;
                by level;
                output;
        end;
run;

proc sql;
        create table temp2 as
                select *,sum(flag) as out1,count(*) as out2
                        from raw
                        group by level
                        order by level desc;
quit;[/code:mr23ugi5]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-5-26 10:22:33 | 只看该作者

Re: 请问各位高手如何实现下面数据处理的程序,附有结果

hopewell真是厉害啊,如此短的时间里就提出了2种方法,而且非常简洁。非常感谢啊
但是还有如下几个问题,希望hopewell解答


1、index=(level),是为了后面使用last.level吗,

是不是变量level就变成一个全局变量了,类似与宏?
2、last.level是同一类的观测数吗?

3、在第一种方法中我看到顺序有原来的降序,变成了升序,自己试着修改也没有成?
在里面加order by level desc;也没成,在这里面改还有其他方法吗??
(后来想可以把temp1中的数据排序一下就可以了呵呵)
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-5-26 12:59:37 | 只看该作者

Re: 请问各位高手如何实现下面数据处理的程序,附有结果

[quote:3qvgp1xd]1、index=(level)[/quote:3qvgp1xd]是为了使用by组,进而使用by组的last.variable,那是个索引

[quote:3qvgp1xd]2、last.level是同一类的观测数吗?[/quote:3qvgp1xd]不是,是个by组的临时变量,每个by组的最后一个观测的last.variable值为1,其他为0

[quote:3qvgp1xd]3、在第一种方法中我看到顺序有原来的降序,变成了升序[/quote:3qvgp1xd]在by statement中加descending, order by只能用在proc sql
[code:3qvgp1xd]data temp1;
   out1=0;
   out2=0;
   do _n_=1 by 1 until(last.level);
      set raw;
      by descending level;
      out1+flag;
      out2+1;
   end;
   do until(last.level);
      set raw;
      by descending level;
      output;
   end;
run;[/code:3qvgp1xd]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 05:06 , Processed in 0.128062 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表