我有以下SAS代码:
data have_1;
modify have_1 have_2(where=(message="X")) updatemode=nomissingcheck;
by reference;
qty=qty-canceled_qty;
if qty=0 then delete;
run;
这是在循环内,这意味着对于我的问题,数据集have_2
会针对每个循环迭代进行更改。字段条目message
更改代码,例如“X”,“A”,“B”......消息的到达顺序。这就是为什么我在一个遍历每个消息序列的循环中工作的原因。 have_2
中的每封邮件对have_1
都有不同的含义。消息“X”表示我必须将数量更新为特定的参考号。
因此,我对循环内的每个modify
都有message
语句,因为我不知道消息的顺序是什么。如果在上面的示例中,have_1
不等于“X”,我如何避免SAS覆盖我的数据集message
?
此问题是我之前question
的后续问题答案 0 :(得分:3)
“如何避免SAS覆盖我的数据集...” - 如果您的意思是在记录级别覆盖 - 检查_iorc_
值将使您可以控制要执行的操作。您可以添加自己的逻辑来更新下面的模板代码。
不匹配的值是“_DSENMR”。
data have_1;
modify have_1 have_2(where=(message="X")) updatemode=nomissingcheck;
by reference;
if _iorc_ = %sysrc(_SOK) then do;
* Update row ;
replace;
end;
else if _iorc_ = %sysrc(_DSENMR) then do;
* Add row ;
output;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSEMTR) then do;
* Multiple TRANSACTION data set observations do ;
* not exist in MASTER data set ;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSENOM) then do;
* No matching observation was found in MASTER data set ;
_error_ = 0;
end;
run;
在此处查看更多http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm