我在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组合成一个查询以获得一个表作为输出? 或者也许有更好的方法解决整个问题? 感谢
答案 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元素。