楼主: dxystata
947 13

[问答] data如何实现2 [推广有奖]

11
橙红的果士 学生认证  发表于 2023-9-25 09:14:09
whymath 发表于 2023-9-22 10:16
本题的核心是一个表查询(Table Lookup)问题,即要从一个数据集查询某种结果——本题中是分组最大值——然后 ...
透彻[em17][em17]

12
whymath 发表于 2023-9-27 15:47:39
dxystata 发表于 2023-9-22 15:26
程序最好都考虑存在缺失的情况
是指什么样的情况,请具体说说

13
whymath 发表于 2023-9-27 15:54:51
AngleeZZ 发表于 2023-9-22 13:04
我也是最先想到的就是SQL,
然后是Data步
Hash,索引的话感觉有点高端
我从 Paul M. Dorfman 的文章中学来的这些做法,真正厉害的是此人,他在2000年左右就已经尝试在 data step 中实现 hash 索引方法,而 SAS 直到 9.0(2004年发布)才引入 hash 对象。他的文章与你共勉:https://support.sas.com/resource ... /sugi26/p008-26.pdf

14
whymath 发表于 2023-9-27 16:00:19
AngleeZZ 发表于 2023-9-22 13:00
求教啥是双重 set?
上面的样例code看起来感觉是双重set+DOW Loop组合体。。。
双重 set 是我个人的叫法,抱歉让你感到迷惑。该技巧主要通过在第二个 set 语句上添加 point= 选项,并通过遍历的方式完成数据查询,搜索速度慢,但灵活度很高。
  1. data want3;
  2.   set aaa;
  3.   do i=1 to rec;
  4.     set aaa(keep=id x sev rename=(id=tmp_id x=tmp_x sev=tmp_sev)) nobs=rec point=i;
  5.     if id=tmp_id and x=tmp_x then max=max(max,tmp_sev);
  6.   end;
  7.   if sev=max;
  8.   drop tmp_:;
  9. run;
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 1 热心帮助其他会员

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-26 23:25