我想写一个这样的代码:
DATA TEST;
SET original;
IF hour = 30 AND minutes = . or 0 THEN new_minutes = 30;
ELSE if hour = 60 AND minutes = . or 0 then new_minutes = 60;
RUN;
如果我用过 IF小时= 30和分钟=。 OR分钟= 0那么new_minutes = 30;那么即使新值应该是60,它也会变为30.我有办法解决这个问题,除了将所有0改为。 (或全部。到0)
答案 0 :(得分:2)
听起来你需要()。
IF hour = 30 AND (minutes = . or minutes = 0) THEN new_minutes = 30;
或者您可以使用in
声明
IF hour = 30 AND minutes in ( . , 0) THEN new_minutes = 30;
答案 1 :(得分:1)
你可以使用coalesce
;返回第一个非缺失结果。
if hour = 30 and coalesce(minutes,0) = 0 then minutes=30;
我还建议您可以这样写它来简化代码:
if hour in (30,60) and coalesce(minutes,0) = 0 then minutes=hour;
您甚至可以概括第一部分,具体取决于小时的合法价值。如果小时不能超过24,那么
if hour > 24 and coalesce(minutes,0) = 0 then minutes=hour;
是一种可能性,以及检查小时是否可以被15或10或类似的东西整除。
答案 2 :(得分:1)
您甚至可以在没有任何if
语句的情况下编写它,前提是如果不满足条件,您可以接受new_minutes
为零:
data want ; set have ; new_minutes = (hour in(30,60) and minutes in(.,0)) * hour ; run ;