全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2239 8
2018-05-03
如题,SAS有类似Tuple(元组)的功能吗?
比如,目前有一个要分析的名单表test,包含变量idcard,name,mobile。
以此作为主表,在mysql数据库中提取相关数据(数据库只有读取权限)。
如何不通过关联查询,找出数据库adc中表table1的各个idcard对应的limit字段的数据。
示例:
*test表导入sas的work库

proc sql;
create table tenp01 as
select idcard,limit
from work.test  as a left join abc.table1 as b on a.

idcard=b.idcard;


quit;
。以上方法可以实现,但是如果碰到adc中表table1数据量非常大的情况,跨库adc和work,SAS读取速度非常慢。
试过,把表test的idcard作为宏变量&var1,用where adc.idcard in (&var1)的方法,但是宏变量的长度有限制,最多大概只能64000。
想请教各位大神,有没有什么更好的方法?
(python中是可以把idcard作为一个元组,然后用 in {0}的方法。)


二维码

扫码加我 拉你入群

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

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

全部回复
2018-5-5 16:47:06
我不用SAS也挺久了,现在新入的知识也不知道了

看你筛选表有3个变量,那你筛选的规则是需要筛选表的三个变量联合匹配么?就是obs = 1时idcard+name+mobile都匹配上才算,否则看下一条

如果是并得关系,那你可以试试SQL中的子查询,你主表where语句中可以从catx把那三个key接起来,再子查询筛选表

如果是且得关系,那我有限的记忆,还是推荐你用data步的hash table吧

SAS只有dataframe的数据框架,宏只是协助
二维码

扫码加我 拉你入群

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

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

2018-5-6 11:37:00
速度慢主要是跨库读取关联的缘故,一般这种情况用pass through要比libname快的多。
如果test里的idcard数量太多没法select into:, 可以选出distinct idcard, 然后只把这些需要关联的idcard也存到abc library里,然后用pass through,速度会快很多。
二维码

扫码加我 拉你入群

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

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

2018-5-6 19:43:46
popodan 发表于 2018-5-6 11:37
速度慢主要是跨库读取关联的缘故,一般这种情况用pass through要比libname快的多。
如果test里的idcard数量 ...
对的,主要就是要解决如何避免跨库关联效率慢的问题。abc库没有写入权限的(公司的生产库)。
解决这个问题,还有其他思路吗
二维码

扫码加我 拉你入群

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

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

2018-5-6 23:23:10
Tigflanker 发表于 2018-5-5 16:47
我不用SAS也挺久了,现在新入的知识也不知道了

看你筛选表有3个变量,那你筛选的规则是需要筛选表的三个 ...
感谢提供的思路,目标是将test中的idcard对应的abd.table1表中的关联数据取出来(name+mobile不用对应)。
hash table我没怎么用过,不确定能否实现。因为abc库是没有写入权限的,不清楚会不会涉及到数据源本地化的问题。
二维码

扫码加我 拉你入群

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

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

2018-5-7 05:46:11
wps930720 发表于 2018-5-6 19:43
对的,主要就是要解决如何避免跨库关联效率慢的问题。abc库没有写入权限的(公司的生产库)。
解决这个问 ...
如果abc没有写入资格建议用笨办法,就是把test 的 idcard分成几份,然后再分别select into 成macro再一个一个在pass through里用where语句pull list。最后再合并。原则上比直接用libname要快。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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