楼主: jiny.zheng
2492 9

[原创博文] 求教SAS怎么计算tie的个数 [推广有奖]

  • 1关注
  • 0粉丝

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
396 点
帖子
35
精华
0
在线时间
48 小时
注册时间
2012-4-21
最后登录
2014-3-9

楼主
jiny.zheng 发表于 2012-4-21 21:42:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
第一次编到这种程序彻底傻眼。
求前辈指教!不胜感激。
选取dataset的一部分
mainID        ID1        ID2        ID3        ID4
1000        1017        1027        1021        1010
1000        2109        2013        1001        1002     
1000        1013        1021        1051        1799
1000        1280        1278        1369        1928
1000        7832        2178        1279        1276
1001        1928        1932        1652        3827
1001        1927        1587        8172        9172
1001        1979        9731        9179        7382       
1001        1972        8723        7632        8372
1001        2981        9128        9217        3917
1002        1292        9132        7382        8328
1002        9170        9312        7398        9371       
1002        9372        7483        8327        4928
1002        8362        9837        7436        8327
1002        3091        3028        3108        3208


大概 总共是9千个ID,从1000到9999。每一行表示mainID和 ID1 ID2 ID3 ID4合作过。要计算的是每一行中的mainID分别和 ID1 ID2 ID3 ID4在整个dataset中的合作次数tie1 tie2 tie3 tie4。

例如对第一行,要求的tie1就是mainID 1000和ID1 1017两者在整个dataset中出现于同一行的次数,记为tie1。
二维码

扫码加我 拉你入群

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

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

关键词:dataset DataS Aini Main Data 不胜感激 程序

沙发
weitingkoala 发表于 2012-4-21 23:09:01
It is pretty difficult!!!

藤椅
jiny.zheng 发表于 2012-4-22 13:38:48
weitingkoala 发表于 2012-4-21 23:09
It is pretty difficult!!!
我已经被逼疯了T.T老板周四要revised dataset.....

板凳
chendonghui1987 发表于 2012-4-22 15:37:16
不知道对不对,希望对你有所帮助
data work.a;
        input mainid $ id1 $ id2 $ id3 $ id4 $;
        datalines;
1000        1017        1027        1021        1010
1000        2109        2013        1001        1002
1000        1013        1021        1051        1799
1000        1280        1278        1369        1928
1000        7832        2178        1279        1276
1001        1928        1932        1652        3827
1001        1927        1587        8172        9172
1001        1979        9731        9179        7382
1001        1972        8723        7632        8372
1001        2981        9128        9217        3917
1000        1017        1028        1021        1010
1002        1292        9132        7382        8328
1002        9170        9312        7398        9371
1002        9372        7483        8327        4928
1002        8362        9837        7436        8327
1002        3091        3028        3108        3208
;
run;



proc sql noprint;
        create table work.b as
                select *,count(mainid) as tie1
                from work.a
                group by mainid,id1;
/*                order by mainid,id1;*/

        create table work.c as
                select *,count(mainid) as tie2
                from work.a
                group by mainid,id2;
/*                order by mainid,id2;*/

        create table work.d as
                select *,count(mainid) as tie3
                from work.a
                group by mainid,id3;
/*                order by mainid,id3;*/

        create table work.e as
                select *,count(mainid) as tie4
                from work.a
                group by mainid,id4;
/*                order by mainid,id4;*/
quit;

data work.f;
        merge work.b work.c work.d work.e;
run;

报纸
jiny.zheng 发表于 2012-4-23 15:50:48
chendonghui1987 发表于 2012-4-22 15:37
不知道对不对,希望对你有所帮助
data work.a;
        input mainid $ id1 $ id2 $ id3 $ id4 $;
太感谢楼上了,非常好用~SQL果断很强大啊!真心感谢您的帮助。

地板
chendonghui1987 发表于 2012-4-23 16:39:13
最后那个merge好像还需要加个by,具体的你去查一下资料吧,要不然他们合并的时候好像会有点问题

7
jiny.zheng 发表于 2012-4-29 11:21:15
chendonghui1987 发表于 2012-4-23 16:39
最后那个merge好像还需要加个by,具体的你去查一下资料吧,要不然他们合并的时候好像会有点问题
嗯~确实是,谢谢您!

8
jiny.zheng 发表于 2012-5-4 15:36:44
chendonghui1987 发表于 2012-4-23 16:39
最后那个merge好像还需要加个by,具体的你去查一下资料吧,要不然他们合并的时候好像会有点问题
楼主,好像这个编法有一点问题。比如对于第一行
main           ID1         ID2          ID3           ID4
1000        1017        1027        1021        1010
如果1017在后续的行中只出现在ID1的位置,那么您的算法没问题;
但是假如1017出现在了ID2,ID3或者ID4的column,那么您的算法就没有计数计进去了。。
我需要不管1017出现在哪个位置,只要1000和1017出现在了同一行,计数就加一。
是否有办法?谢谢您

9
chendonghui1987 发表于 2012-5-4 16:51:10
看着你这个四位数字像是科目号.
你既然都不管出现那个id中都进行汇总,不如不在求四个tie,把数据源进行转置,
比如第一行1000        1017        1027        1021        1010
把他转置为
1000 1017
1000 1027
1000 1021
1000 1010
这四条记录,其他行类似,这样最后根据这两列进行汇总统计,就可以了.

10
chendonghui1987 发表于 2012-5-4 17:02:46
data work.a;
        input mainid $ id1 $ id2 $ id3 $ id4 $;
        datalines;
1000        1017        1027        1021        1010
1000        2109        2013        1001        1002
1000        1013        1021        1051        1799
1000        1280        1278        1369        1928
1000        7832        2178        1279        1276
1001        1928        1932        1652        3827
1001        1927        1587        8172        9172
1001        1979        9731        9179        7382
1001        1972        8723        7632        8372
1001        2981        9128        9217        3917
1000        1017        1028        1021        1010
1002        1292        9132        7382        8328
1002        9170        9312        7398        9371
1002        9372        7483        8327        4928
1002        8362        9837        7436        8327
1002        3091        3028        3108        3208
;
run;



proc sql noprint;
        create table work.b as
                select distinct mainid,id1 as id,count(mainid) as tie
                from work.a
                group by mainid,id1;

        create table work.c as
                select distinct mainid,id2 as id,count(mainid) as tie
                from work.a
                group by mainid,id2;

        create table work.d as
                select distinct mainid,id3 as id,count(mainid) as tie
                from work.a
                group by mainid,id3;

        create table work.e as
                select distinct mainid,id4 as id,count(mainid) as tie
                from work.a
                group by mainid,id4;
quit;

data work.result;
/*        set work.b(keep = mainid id) work.c(keep = mainid id) work.d(keep = mainid id) work.e(keep = mainid id);*/
        set work.b work.c work.d work.e;
run;


proc sql noprint;
        create table work.result as
                select mainid,id,sum(tie) as tie
                from work.result
                group mainid ,id;
quit;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 12:40