2016-04-18 3 views
1

Я хочу, чтобы написать такой код:дважды, если затем САЦ

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 minutes = 0 THEN new_minutes = 30; ТОГДА, даже если новое значение должно быть 60, оно меняется на 30. У меня есть способ обойти это, кроме того, чтобы изменить все 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; 
+0

Это именно то, что мне нужно. Благодарю. –

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 или что-то подобное.

1

Вы могли даже написать его без каких-либо if заявления, предоставляя вам может принять new_minutes равно нулю, если критерии не удовлетворены:

 
data want ; 
    set have ; 
    new_minutes = (hour in(30,60) and minutes in(.,0)) * hour ; 
run ; 
Смежные вопросы