SAS:如何不写一个数据集时,“何处”条件的“修改”说法不成立?(SAS: How not to o

2019-10-18 16:37发布

我有以下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”?

这个问题是一个后续行动,我以前的问题

Answer 1:

“我如何才能避免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?
标签: sas