Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建依赖于自身的SAS变量?_Sas - Fatal编程技术网

如何创建依赖于自身的SAS变量?

如何创建依赖于自身的SAS变量?,sas,Sas,我有一个数据集(见下图)。我需要填写缝合的价格栏。对于第1行,我需要使用“price”中的值。这是有效的 对于第2行之后的内容,我需要执行以下操作:sticked\u price=lag(sticked\u price)*(trade\u return+1)。但是,这不起作用,将所有大于1的行保留为空 这是我的密码: data test2; set test; if _N_ = 1 then stitched_price = price; else stitched_pr

我有一个数据集(见下图)。我需要填写缝合的价格栏。对于第1行,我需要使用“price”中的值。这是有效的

对于第2行之后的内容,我需要执行以下操作:
sticked\u price=lag(sticked\u price)*(trade\u return+1)
。但是,这不起作用,将所有大于1的行保留为空

这是我的密码:

data test2;
    set test;
    if _N_ = 1 then stitched_price = price;
    else stitched_price = lag(stitched_price) * (1 + trade_return);
run;
我不知道为什么会这样。我知道在if语句中使用lag涉及到很多复杂的问题,但是有没有办法解决这个问题呢

请尝试保留:

data test2;
   set test;
    retain stitched_price;
    if _N_ = 1 then stitched_price = price;
    else stitched_price = stitched_price * (1 + trade_return);
run;
一般来说,滞后在条件块中不起作用。如果您确实想使用lag,它将如下所示:

data test2;
   set test;
    lag_s=lag(stitched_price);
    if _N_ = 1 then stitched_price = price;
    else stitched_price = lag_s * (1 + trade_return);
run;
这里有一篇关于为什么滞后不起作用的老帖子,我相信谷歌还有很多其他帖子:

您的保留答案有效!我完全忘记了保留声明。Oops.@RobertPenridge的可能重复项不正确。我读了这个问题,这让我相信上面的代码会起作用。打字和截图要比简单的搜索花费更多的精力。我只是在搜索了几个地点后才问。链接问题的答案既讨论了如何正确使用
lag()
,也提到了使用
retain
语句作为替代。