楼主: jiny.zheng
6832 23

[原创博文] SAS怎么对一定条件计数 [推广有奖]

11
jiny.zheng 发表于 2012-5-4 14:36:23
chendonghui1987 发表于 2012-5-4 14:21
最后生成的结果集就是这个.
ID1 ID2 ID3 ID4 count
1013 1021 1051 1799 6
也不是,抱歉,上面一行忘了 两个字。其实就是您的想法再做一个并集,我要的是行的数量,就是每个ID出现的行求并~也就是凡是出现过四个ID中的一个的就算进来,我要求这样的行总共有几行。谢谢~

12
chendonghui1987 发表于 2012-5-4 14:46:13
那你把我刚才的那个改一下,我看一下最后你要的结果到底是什么样子的,光听你说,有点晕

13
jiny.zheng 发表于 2012-5-4 14:57:36
假如说数据集是
1 2 3 4
2 3 7 9
5 9 7 6
2 0 3 1
4 8 5 6
对第一行,我要算的就是出现了1 2 3 4中的一个或者多个的行数
所以除了第三行都包括1或2或3或4,所以第一行的count是4
对第二行,只有第四行都不包括2或3或7或9,所以也是4
就是这样的计数过程。。不知怎么算,求前辈指导!

14
chendonghui1987 发表于 2012-5-4 14:57:50
就是你找一些数据,不要太多5到6条就行,把你要的最终结果用数据的方式列出来,根据这结果在去做一些文字说明,比你直接用文件说明更直观,让别人更能理解你的意图,要不效率太低了

15
jiny.zheng 发表于 2012-5-4 14:58:09
chendonghui1987 发表于 2012-5-4 14:46
那你把我刚才的那个改一下,我看一下最后你要的结果到底是什么样子的,光听你说,有点晕
假如说数据集是
1 2 3 4
2 3 7 9
5 9 7 6
2 0 3 1
4 8 5 6
对第一行,我要算的就是出现了1 2 3 4中的一个或者多个的行数
所以除了第三行都包括1或2或3或4,所以第一行的count是4
对第二行,只有第四行都不包括2或3或7或9,所以也是4
就是这样的计数过程。。不知怎么算,求前辈指导!

16
jiny.zheng 发表于 2012-5-4 15:02:11
chendonghui1987 发表于 2012-5-4 14:57
就是你找一些数据,不要太多5到6条就行,把你要的最终结果用数据的方式列出来,根据这结果在去做一些文字说明, ...
说错了,对第二行,是第五行不包括任何一个ID

17
chendonghui1987 发表于 2012-5-4 15:07:24
1 2 3 4
2 3 7 9
5 9 7 6
2 0 3 1
4 8 5 6
1 2 3 4
5 9 7 6
这样的数据第一行的count就是5了,第三行就是3了

18
jiny.zheng 发表于 2012-5-4 15:22:02
chendonghui1987 发表于 2012-5-4 15:07
1 2 3 4
2 3 7 9
5 9 7 6
第三行如果包括自己的话应该有是4吧,包括第二,三,五,七行

19
chendonghui1987 发表于 2012-5-4 16:17:49

options mprint mlogic symbolgen source;

data work.a;
        input id1 $ id2 $ id3 $ id4 $;
        datalines;

1 2 3 4
2 3 7 9
5 9 7 6
2 0 3 1
4 8 5 6
1 2 3 4
5 9 7 6
;
run;

data work.a;
        set work.a;
        i+1;
run;

proc sql noprint;
        create table work.result(
                id1 varchar(4),
                id2 varchar(4),
                id3 varchar(4),
                id4 varchar(4),
                count numeric
        );

        select count(*) into :cnt
        from work.a;


quit;

%macro a;

        %let cnt = &cnt;

        %do j = 1 %to &cnt;

                proc sql noprint;
                        select id1,id2,id3,id4 into :id1,:id2,:id3,:id4
                        from work.a
                        where i = &j;
                quit;

                data work.c;
                        set work.a;
                        if id1 = &id1 or id1 = &id2 or id1 = &id3 or id1 = &id4 then do;
                                count+1;
                        end;else if id2 = &id1 or id2 = &id2 or id2 = &id3 or id2 = &id4 then do;
                                count+1;
                        end;else if id3 = &id1 or id3 = &id2 or id3 = &id3 or id3 = &id4 then do;
                                count+1;
                        end;else if id4 = &id1 or id4 = &id2 or id4 = &id3 or id4 = &id4 then do;
                                count+1;
                        end;
                run;

                proc sql noprint;
                        select max(count) as count into :count
                        from work.c;

                        %let count = &count;

                        insert into work.result
/*                        create table work.d as */
                                select distinct a.id1,
                                        a.id2,
                                        a.id3,
                                        a.id4,
                                        &count
                                from work.a as a
                                where input(a.id1,4.) = &id1 and input(a.id2,4.) = &id2 and input(a.id3,4.) = &id3 and input(a.id4,4.) = &id4;
                quit;
        %end;

%mend;

%a;

20
chendonghui1987 发表于 2012-5-4 16:19:07
你看看,对不对,最后结果集如下:


id1    id2    id3    id4    count

                                                 1      2      3      4       5
                                                 2      3      7      9       6
                                                 5      9      7      6       4
                                                 2      0      3      1       4
                                                 4      8      5      6       5
                                                 1      2      3      4       5
                                                 5      9      7      6       4

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 04:59