楼主: wps930720
1871 8

[学习分享] SAS关于类似python的Tuple(元组)的疑问 [推广有奖]

  • 3关注
  • 0粉丝

硕士生

88%

还不是VIP/贵宾

-

威望
0
论坛币
115 个
通用积分
10.8524
学术水平
3 点
热心指数
5 点
信用等级
4 点
经验
5124 点
帖子
74
精华
0
在线时间
337 小时
注册时间
2013-5-27
最后登录
2023-8-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,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}的方法。)


二维码

扫码加我 拉你入群

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

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

关键词:python PLE left join proc sql Create

已有 1 人评分热心指数 收起 理由
eijuhz + 2 精彩帖子

总评分: 热心指数 + 2   查看全部评分

沙发
Tigflanker 发表于 2018-5-5 16:47:06 |只看作者 |坛友微信交流群
我不用SAS也挺久了,现在新入的知识也不知道了

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

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

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

SAS只有dataframe的数据框架,宏只是协助
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

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

使用道具

藤椅
popodan 在职认证  发表于 2018-5-6 11:37:00 |只看作者 |坛友微信交流群
速度慢主要是跨库读取关联的缘故,一般这种情况用pass through要比libname快的多。
如果test里的idcard数量太多没法select into:, 可以选出distinct idcard, 然后只把这些需要关联的idcard也存到abc library里,然后用pass through,速度会快很多。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

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

使用道具

板凳
wps930720 在职认证  发表于 2018-5-6 19:43:46 |只看作者 |坛友微信交流群
popodan 发表于 2018-5-6 11:37
速度慢主要是跨库读取关联的缘故,一般这种情况用pass through要比libname快的多。
如果test里的idcard数量 ...
对的,主要就是要解决如何避免跨库关联效率慢的问题。abc库没有写入权限的(公司的生产库)。
解决这个问题,还有其他思路吗

使用道具

报纸
wps930720 在职认证  发表于 2018-5-6 23:23:10 |只看作者 |坛友微信交流群
Tigflanker 发表于 2018-5-5 16:47
我不用SAS也挺久了,现在新入的知识也不知道了

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

使用道具

地板
popodan 在职认证  发表于 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要快。

使用道具

7
wps930720 在职认证  发表于 2018-5-28 11:48:28 |只看作者 |坛友微信交流群
popodan 发表于 2018-5-7 05:46
如果abc没有写入资格建议用笨办法,就是把test 的 idcard分成几份,然后再分别select into 成macro再一个 ...
嗯,这个是个办法。但如果idcard的数据量过大的话,还是非常繁琐的,不知是否有其他更好的办法。苦恼

使用道具

8
wps930720 在职认证  发表于 2018-11-1 18:25:16 |只看作者 |坛友微信交流群
顶起来!大神们,有没有其它什么好办法

使用道具

9
lucky_forever 发表于 2018-11-1 21:52:42 来自手机 |只看作者 |坛友微信交流群
读work library 的数据和database 里的数据整合,比较有效的方法是把work lib 里的数据传到database 里去,然后数同一个database 里的数据整合,效率提高很多

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 21:44