我有一个数据集have
,其中一个条目具有多个变量,如下所示:
message reference time qty price
x 101 35000 100 .
上述数据集每次都在循环中更改,其中message
可以为 =“A”。如果message
="X" 那么这意味着从 MASTER 集中删除 100 个数量,其中reference
数量等于reference
MASTER 数据库中的数量。price
= 。是因为它已经在reference
=101下的MASTER数据库中了。MASTER 数据库以某个价格和可用数量汇总所有可用订单。如果在下一个循环中message
=“A”,那么have
数据集将如下所示:
留言参考时间数量价格A 102 35010 150 500
那么这意味着向reference
MASTER 数据库添加一个新号码。也就是说,要append
线到MASTER。
当有message
X 时,我的循环中有以下代码来更新我的 MASTER 数据库中的数量:
data b.master;
modify b.master have(where=(message="X")) updatemode=nomissingcheck;
by order_reference_number;
if _iorc_ = %sysrc(_SOK) then do;
replace;
end;
else if _iorc_ = %sysrc(_DSENMR) then do;
output;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSEMTR) then do;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSENOM) then do;
_error_ = 0;
end;
run;
我使用replace
来更新数量。但是自从我输入price
=。什么时候message
是 X,上面的代码设置了price
='.' where reference
=101 在 MASTER 中通过replace
语句...我不想要。因此,我更喜欢删除数据集中的价格列message
=X have
。但是我不想在message
=A 时删除列价格,因为我使用了这段代码
proc append base=MASTER data=have(where=(msg_type="A")) force;
run;
因此,我的Modify
声明中有这个代码价格:
data have(drop=price_alt);
set have; if message="X" then do;
output;end;
else do; /*I WANT TO MAKE NO CHANGE*/
end;run;
但它没有做我想要的。如果消息不等于 X,那么我不想删除该列。如果它等于 X,我想删除该列。如何调整上面的代码以使其工作?