全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1226 5
2015-03-18
悬赏 20 个论坛币 已解决
想将纵列数据变成并列,按照id的不同比较变量point. 只要求数据操作该怎么写程序
比如数据格式为
Id point
1   15
1    7
1   23
2    9
2    4
2    11
3    12
3    5
3    32
转化成
Id point idh pointk
1    15   2   9
1     7   2   4
1    23   2   11
1    15   3   12
1     7   3    5
1    23   3   32
2     9   3   12
2     4   3    5
2     11  3   32
只跟id比自己高的比,注意变量id ,point要改名,新名字可以随便请问程序该怎么写啊,谢谢了。

最佳答案

jl60156 查看完整内容

data have; set have; by id; if first.id then seq=1; else seq+1; run; data want; set have; do i=1 to nobs; set have(rename=(id=idh point=pointk seq=seqh)) nobs=nobs point=i; if id
二维码

扫码加我 拉你入群

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

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

全部回复
2015-3-18 01:02:39
data have;
        set have;
        by id;
        if first.id then seq=1;
        else seq+1;
run;
data want;
        set have;
        do i=1 to nobs;
        set have(rename=(id=idh point=pointk seq=seqh)) nobs=nobs  point=i;
        if id<idh and seq=seqh then output;
        end;
run;
proc sort data=want out=want(drop=seq seqh);
        by id  idh seq seqh;
run;
二维码

扫码加我 拉你入群

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

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

2015-3-18 08:57:36
真是高手啊, 多谢多谢了。不知道怎么把金币给你,是设为最佳答案就可以了吗?

想追问一下比如这样的

Id point
1   15
1    7
1   23
1  33
1  22
1  35
1  12
1  15
1   56
2     9
2     4
2     11
2    78  
2    83  
2    90  
2    77  
2    66  
2    88
3     71
3     65
3     83
3     72
3     73
3     74
3    91  
3    92  
3    93
4     45
4     21
4     63
4     82
4     83
4     84
4     100
4     101
4     102

id 2, id 3,id 4完全重复id 1的模式。想要变成
Id point idh pointk
1    15  2     9
1     7  2     4
1    23  2     11
1    33  3     71
1    22  3     65
1    35  3     83
1    12  4     45
1    15  4     21
1    56  4     63
2    78  3     72
2    83  3     73
2    90  3     74
2    77  4     82
2    66  4     83
2    88  4     84
3    91  4     100
3    92  4     101
3    93  4     102

怎么写啊?
二维码

扫码加我 拉你入群

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

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

2015-3-18 08:59:40
jl60156 发表于 2015-3-18 02:59
data have;
        set have;
        by id;
jl60156,真是高手啊, 多谢多谢了。不知道怎么把金币给你,是设为最佳答案就可以了吗?

想追问一下比如这样的

Id point
1   15
1    7
1   23
1  33
1  22
1  35
1  12
1  15
1   56
2     9
2     4
2     11
2    78  
2    83  
2    90  
2    77  
2    66  
2    88
3     71
3     65
3     83
3     72
3     73
3     74
3    91  
3    92  
3    93
4     45
4     21
4     63
4     82
4     83
4     84
4     100
4     101
4     102

id 2, id 3,id 4完全重复id 1的模式。想要变成
Id point idh pointk
1    15  2     9
1     7  2     4
1    23  2     11
1    33  3     71
1    22  3     65
1    35  3     83
1    12  4     45
1    15  4     21
1    56  4     63
2    78  3     72
2    83  3     73
2    90  3     74
2    77  4     82
2    66  4     83
2    88  4     84
3    91  4     100
3    92  4     101
3    93  4     102

怎么写啊?
二维码

扫码加我 拉你入群

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

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

2015-3-18 10:04:29
bravesimon 发表于 2015-3-18 08:59
jl60156,真是高手啊, 多谢多谢了。不知道怎么把金币给你,是设为最佳答案就可以了吗?

想追问一 ...
just revise the previous code as the following


data want;
        set have;
        do i=1 to nobs;
        set have(rename=(id=idh point=pointk seq=seqh)) nobs=nobs  point=i;
        if id<idh and id eq ceil(seqh/3) and seq eq ((mod(seqh,3)+(mod(seqh,3) eq 0)*3) +(idh-2)*3) then output;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2015-3-18 11:54:33
jl60156 发表于 2015-3-18 10:04
just revise the previous code as the following
佩服,能分析成这样细真的是有功夫啊,受教了,真心感谢。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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