我有以下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
因为我不知道什么是消息的顺序循环中。 如何避免SAS覆盖我的数据集have_1
如果在例如上面说的,该message
不等于“X”?
这个问题是一个后续行动,我以前的问题
“我如何才能避免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
文章来源: SAS: How not to overwrite a dataset when the “where” condition in a “Modify” statement does not hold?