SAS:当;其中;“a”中的条件;修改";声明不成立?
我有以下SAS代码:SAS:当;其中;“a”中的条件;修改";声明不成立?,sas,Sas,我有以下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; 这是在一个循环中,这意味着对于我的问题,数据集在每个循环迭代中都有变化。字段条目消息更改代码,如“X”、“A”、“B”。。。消息的到达顺序是最重要的。这就是为什么我在一个循环中工作,
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;
这是在一个循环中,这意味着对于我的问题,数据集在每个循环迭代中都有变化。字段条目消息
更改代码,如“X”、“A”、“B”。。。消息的到达顺序是最重要的。这就是为什么我在一个循环中工作,循环遍历每条消息的序列。have_2
中的每条消息对have_1
有不同的含义。消息“X”意味着我必须将数量更新为特定的参考号
因此,对于循环中的每个消息
,我都有一个modify
语句,因为我不知道消息的顺序。如果在上面的示例中,消息
不等于“X”,如何避免SAS覆盖我的数据集have_1
这个问题是我之前的“如何避免SAS覆盖我的数据集…”问题的后续问题-如果您的意思是在记录级别上覆盖-检查\u iorc\u
值可以让您控制要做什么。您可以将自己的逻辑添加到以下模板代码的更新中。
不匹配的值为“\u 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;