如果那么在sas加倍

时间:2016-04-18 16:27:23

标签: if-statement sas

我想写一个这样的代码:

 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)

3 个答案:

答案 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 ;