楼主: 小鳄鱼a
2639 9

求个匹配问题 [推广有奖]

  • 6关注
  • 10粉丝

已卖:280份资源

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

楼主
小鳄鱼a 发表于 2015-10-28 21:26:39 |AI写论文
150论坛币

只要右边的得到左边的name中其中一个匹配 , 那么  mark就为1  否则为0


example3.xlsx
下载链接: https://bbs.pinggu.org/a-1904286.html

9.7 KB

需要: 30 个论坛币  [购买]

最佳答案

sniperhgy 查看完整内容

楼主你好,请看看我的代码:其中table_base 的内容为左边的那些内容(year, qtr,name),table_ref的内容为右边的那些内容,也就是参照的内容,执行了上述语句之后,得到的wanted里面就会多出一列mark,存在的为1,不存在的为0.
关键词:Mark name Mar

沙发
sniperhgy(未真实交易用户) 发表于 2015-10-28 21:26:40
小鳄鱼a 发表于 2015-10-29 13:25
已经上传   谢谢
楼主你好,请看看我的代码:
  1. proc sql;
  2.   create table wanted as
  3.   select a.*, case
  4.                 when exists(select 1 from table_ref b
  5.                             where a.year = b.year and a.qtr = b.qtr and index(a.name, b.name) > 0) then
  6.                                   1

  7.                 else
  8.                   0
  9.               end as mark
  10.   from table_base a
  11.   ;
  12. quit;
复制代码
其中table_base 的内容为左边的那些内容(year, qtr,name),table_ref的内容为右边的那些内容,也就是参照的内容,执行了上述语句之后,得到的wanted里面就会多出一列mark,存在的为1,不存在的为0.
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

藤椅
mandyfervor(未真实交易用户) 发表于 2015-10-28 23:26:24
刚学adv,感觉应该用exists,不求拿币,帮顶,期待楼下的讨论。
proc sql;
    select a.name
        from libref.a
        where exists
            (select *
                from libref.b
                where a.name=b.name);
quit;
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 10 热心帮助其他会员
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 15  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

板凳
小鳄鱼a(未真实交易用户) 发表于 2015-10-28 23:49:48
mandyfervor 发表于 2015-10-28 23:26
刚学adv,感觉应该用exists,不求拿币,帮顶,期待楼下的讨论。
proc sql;
    select a.name
谢谢   才发现忘了上传附件   明天再传了

报纸
小鳄鱼a(未真实交易用户) 发表于 2015-10-29 13:25:34
mandyfervor 发表于 2015-10-28 23:26
刚学adv,感觉应该用exists,不求拿币,帮顶,期待楼下的讨论。
proc sql;
    select a.name
已经上传   谢谢

地板
小鳄鱼a(未真实交易用户) 发表于 2015-10-29 16:29:04
sniperhgy 发表于 2015-10-28 21:26
楼主你好,请看看我的代码:其中table_base 的内容为左边的那些内容(year, qtr,name),table_ref的内 ...
请教个  问题啊     a  和  b是两个原始文件对应的临时文件吧   执行完程序接着消失吗

7
sniperhgy(未真实交易用户) 发表于 2015-10-29 17:10:46
小鳄鱼a 发表于 2015-10-29 16:29
请教个  问题啊     a  和  b是两个原始文件对应的临时文件吧   执行完程序接着消失吗
哦,那个a和b是逻辑的“名称”,而不是“临时文件”,执行完毕后,就消失了。

8
小鳄鱼a(未真实交易用户) 发表于 2015-10-31 10:20:24
sniperhgy 发表于 2015-10-29 17:10
哦,那个a和b是逻辑的“名称”,而不是“临时文件”,执行完毕后,就消失了。
请教个问题啊    我执行我的数据  跟例子数据不一样  后  出现

1394    ;
ERROR: 用“等于 (=)”的表达式具有不同数据类型的组件。
1395  quit;
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒
这个如何解决啊

9
小鳄鱼a(未真实交易用户) 发表于 2015-10-31 10:23:27
sniperhgy 发表于 2015-10-29 17:10
哦,那个a和b是逻辑的“名称”,而不是“临时文件”,执行完毕后,就消失了。
解决了   谢谢

10
johnpark1(未真实交易用户) 发表于 2015-10-31 12:33:37
Proc sort data=b (keep=year qtr name) nodupkey out=b2;
By year qtr name;

Proc sort data=a; by year qtr name;

Data a;Merge a (in=ina) b(in=inb);
By year qtr name;
If ina;
mark = inb;
Run;

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

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