使用proc sql在表中的每条记录中插入新的列,并反复取值。

我想知道是否有技术可以在表中的每一个唯一的行中插入新的具有迭代值的列?

例如

TABLE HAVE

ID  name
1   John
2   Matt
3   Pete

现在,我有一个counter = 3,我想把每一个counter值加到表HAVE中的每一个唯一的ID上,最多3。

表WANT

ID name count
1  John 1
1  John 2
1  John 3
2  Matt 1
2  Matt 2
2  Matt 3
3  Pete 1
3  Pete 2
3  Pete 3

我可以使用data step结合by和first.var来实现。

data want;
  set have;
    by ID;
  if first.ID then do;
    do i = 1 to count;
      output;
    end;
  end;
run;

我的主要问题是运行时间, data step按顺序处理一个数据集 可能需要一些时间来运行. 我想知道这是否可以用proc sql来完成?

解决方案:

不能特别容易做到 proc sql 使用内置功能。 一种解决方案是,如果你有某种统计表或数字表。 那么你可以直接做。

select id, t.name, n.n
from t join
     numbers n
     on n.n <= :counter;

事实上,如果你的id是连续的,没有空隙(就像你的例子),你可以使用自连接。

select t.id, t.name, n.id as count
from t join
     t n
     on n.id <= :counter;

如果你知道具体的值,你可以构建一个 union all 查询。

select id, name, 1 as count from t
union all
select id, name, 2 as count from t
union all
select id, name, 3 as count from t;

现代SQL现在已经有了简化这个过程的结构(例如窗口函数和递归CTE)。 然而,这些在 proc sql.

给TA打赏
共{{data.count}}人
人已打赏
未分类

express + express-graphql helloworld 返回 null

2022-9-9 0:22:36

未分类

即使某些索引未定义,也要执行for循环的所有迭代 (Javascript)(ajax)

2022-9-9 0:22:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索