楼主: tzdxrrr
3422 5

[问答] 求助SAS高手!关于配对合并 [推广有奖]

  • 0关注
  • 0粉丝

初中生

23%

还不是VIP/贵宾

-

威望
0
论坛币
637 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
97 点
帖子
11
精华
0
在线时间
9 小时
注册时间
2010-12-20
最后登录
2022-12-20

楼主
tzdxrrr 发表于 2010-12-20 13:13:49 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
A表是个名单,有两列一列Name 一列yearB表中有很多列,其中有一列是Name 一列是year而且Name中有类似于 "张三,李四"这样的数据,就是说一行里面好几个名字。要在B表中加一列P 如果B表某条记录的Name字段有在A表里的名单中存在,且A.year=B.year 那么P=1 否则 P=0怎么处理
二维码

扫码加我 拉你入群

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

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

关键词:name year 怎么处理 ear 求助 高手 SAS 配对

回帖推荐

elek.me 发表于6楼  查看完整内容

不好意思,看到的晚了。我假定第一个数据集里的name和year没有完全重复的,可以用以下程序来解决:

本帖被以下文库推荐

沙发
peijiamei 发表于 2010-12-20 13:17:19
大哥,请用符号段个句
或者列出样本数据呀
我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!

藤椅
tzdxrrr 发表于 2010-12-20 13:21:57
2# peijiamei
A表是个名单,有两列一列Name 一列yearB表中有很多列,其中有一列是Name 一列是year
而且Name中有类似于 "张三,李四"这样的数据,就是说一行里面好几个名字。
要在B表中加一列P 如果B表某条记录的Name字段有在A表里的名单中存在,且A.year=B.year 那么P=1 否则 P=0
怎么处理

样本数据
A表
Name  year
张三   1998
李四   1998
李四   2000
王五   2001
朱六  1998

B表
year Name         * ***** *******  ***还有很多列
1998 张三,李四
1998 王五
1999 朱六
2000 陈七

要加个P列,同时满足名字和时间匹配的值设置为1

板凳
elek.me 发表于 2010-12-20 14:07:01
3# tzdxrrr
重复的年份,怎么处理?
我的博客: http://elek.me/sas
联系我: http://about.me/elek

报纸
tzdxrrr 发表于 2010-12-21 16:53:10
4# elek.me

什么叫重复的年份? 反正意思就是配对合并
原题就是 给出个一流分析师名单和评选上的年度
跟对应的分析报告配对,判断该分析报告是不是当年的一流分析师做出的

地板
elek.me 发表于 2011-1-10 11:15:36
不好意思,看到的晚了。我假定第一个数据集里的name和year没有完全重复的,可以用以下程序来解决:
  1. data have1;
  2.         input name $ year;
  3. cards;
  4. 张三   1998
  5. 李四   1998
  6. 李四   2000
  7. 王五   2001
  8. 朱六   1998
  9. ;

  10. data have2;
  11.         input year name :$10.;
  12. cards;
  13. 1998 张三,李四
  14. 1998 王五
  15. 1999 朱六
  16. 2000 陈七
  17. ;

  18. data want;
  19.         if _n_=1 then do;
  20.                 set have1;
  21.                 declare hash h (dataset:"have1");
  22.                 h.definekey ("name","year");
  23.                 h.definedata("name");
  24.                 h.definedone();
  25.         end;
  26.         set have2(rename=(name=name1));
  27.         i=1;
  28.         p=0;
  29.         do while (scan(name1,i,",")^=" ");
  30.                 name=scan(name1,i,",");
  31.                 if h.find()=0 then do;
  32.                         p=1;
  33.                         leave;
  34.                 end;
  35.                 i+1;
  36.         end;
  37.         drop i name;
  38.         rename name1=name;
  39. run;
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
peijiamei + 100 + 3 + 3 好的意见建议

总评分: 经验 + 100  学术水平 + 3  热心指数 + 3   查看全部评分

我的博客: http://elek.me/sas
联系我: http://about.me/elek

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

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