全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4260 11
2014-01-05
各位大大好,最近使用SAS处理数据时,遇到了一个问题,自己花了很多时间在网上搜找,但仍然不得要领。问题是这样的:

1、我现在有一个数据表TableA,其中有一个变量Info,每一行里面包含了大量的文字信息。
2、此外,我还有一个数据表TableB,里面只有一个变量叫做Keyword,每一行都是一些中文的单词。
3、我现在想做的就是:在TableA中创建一个新变量dummy,然后对每一行的Info进行检索,如果Info内容里面包含有Keyword变量里任意一行的中文单词,就对这一行的dummy赋值为1。如果完全不含有任何一个关键词,则赋值为0.

TableA:(实际的Info内容要比下面的这些长得多,大多数都至少有20字以上)
     Info          其他变量1     其他变量2 ...
蛋糕点心甜        XXX                XXX
喜欢理发           XXX                XXX
点心师傅           XXX                XXX
做蛋糕的           XXX                XXX
     ...                  ...                   ...

TableB:(Keyword里每行本身比较短,一般不超过5个字的,但keyword行数很多)
   Keyword
     蛋糕
     点心
       ...

希望最后得到的表:
     Info          其他变量1     其他变量2 ...    dummy
蛋糕点心甜        XXX                XXX                  1
喜欢理发           XXX                XXX                   0
点心师傅           XXX                XXX                   1
做蛋糕的           XXX                XXX                   1
     ...                  ...                   ...                     ...

我知道如果keyword只是几个词的话,可以用 where Info contains "XXX" 作条件来挨个赋值,但是现在keyword十分多,我就不知道该怎么办了。我的朋友和我说要使用“游标”,但我搜索了半天,也没找到怎么做。
希望有大大能有Proc SQL下的方式能帮我解决这一难题。

另外,我知道直接在data步下,可以用 set if find(info, "XXX") then dummy=1 来挨个赋值,但是对于keyword很多的时候我又不知道怎么办了,如果有大大还能从data步的角度帮助解决一下就更好啦~ (p.s 希望优先SQL的角度解决,因为导师要求全部使用SQL步来处理...)

多谢各位大大!!!跪谢!!!


二维码

扫码加我 拉你入群

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

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

全部回复
2014-1-5 23:29:15
研究一下。
二维码

扫码加我 拉你入群

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

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

2014-1-5 23:35:07
我的朋友使用其他的SQL软件帮我编写了一段代码,可以完成这个工作。但是问题是他使用的涉及到游标部分的程序,我完全不知道该怎么转化为SAS里面的SQL语言...
他的编写程序是:
DECLARE @keyword varchar(255)
DECLARE KEYWORDS CURSOR --定义游标
FOR (SELECT keyword FROM keywordTable) --从keywordTable中查出keyword放到游标中
OPEN KEYWORDS; --打开游标
FETCH NEXT FROM KEYWORDS INTO @keyword; --读取第一行数据
WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @keyword; --打印数据(调试用,正式使用时删除)
        UPDATE tableA SET dummy = 1 WHERE biography like '%'+@keyword+'%'; --更新数据(tableA是需要更新状态的表)
        FETCH NEXT FROM KEYWORDS INTO @keyword; --读取下一行数据
    END
CLOSE KEYWORDS; --关闭游标
DEALLOCATE KEYWORDS; --释放游标
GO

望着这一段程序泪流满面...研究了好些日子,还是搞不定,只能上来求助大家了。
其实我觉得我这个问题在数据处理时还是蛮典型的。求帮助!
二维码

扫码加我 拉你入群

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

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

2014-1-5 23:35:40
我也遇到过类似的问题,要写一堆的like
二维码

扫码加我 拉你入群

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

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

2014-1-5 23:51:10
数据集可以传上来吗?附件。
二维码

扫码加我 拉你入群

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

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

2014-1-6 01:07:44
SQL方法:

我研究了下,提供一个实例。
复制代码



如果info每个值不是唯一的,在group by时,就要把其它变量加上。


data步方法:

目前,想到的是hash表实现,明天写啦,太晚了。

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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