无法在SAS中的Proc SQL中使用LAG功能

时间:2017-10-18 14:21:52

标签: sas

我在SAS程序中创建了proc sql查询,但需要使用LAG函数,它告诉我它不能在proc sql中使用,只是在数据步骤中。 代码:

proc sql;
CREATE TABLE agg_table AS
SELECT USER, MAX(TIME) AS LAST_TIME, SUM(BONUS) AS BONUS_SUM, LAG(EXPDT) AS EXPDT_LAG FROM WORK.MY_DATA GROUP BY USER_ID;

所以,我不知道如何将proc sql和datastep组合成一个查询以获得一个表作为输出? 或者也许有更好的方法解决整个问题? 感谢

1 个答案:

答案 0 :(得分:3)

def apply_sm(merged, c1, c2): if not merged[[c1,c2]].isnull().any(): return difflib.SequenceMatcher(None, merged[c1], merged[c2]).ratio() return 0.0 # <-- you could handle the Null case here 没有与datastep相同的行概念。 SQL可以按任何顺序处理行,不一定是顺序的,并且可以使用散列表,并行处理或各种二叉树和类似方法来处理其查询;并且可以用不同的方法处理相同的查询。因此PROC SQL在SQL中不可用,lag或其他期望行数据的函数也不可用。

从您的问题中不清楚您到底在做什么,所以不能直接回答如何单独进行此操作;但是您可以在一个datastep中完成此任务,或者您可以组合使用datastep和SQL查询,或者两个datastep。您可以在先前的datastep或视图中执行diff,然后在SQL中执行其余操作;或者您可以使用DoW循环datastep来执行max / sum元素。