2016-04-18 8 views
1

に私はこのようなコードを書きたい場合は、二重:私は IF時間= 30と分=を使用していた場合その後、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; 

を。 OR分= 0その後、新しい分= 30;それでは、新しい値が60であっても、それは30に変わるはずです。私は0をすべて0に変更するだけでなく、これを回避する方法もあります。 (または0から0まで)

答えて

2

あなたのように聞こえます()。

IF hour = 30 AND (minutes = . or minutes = 0) THEN new_minutes = 30; 

それとも、あなたは、このための​​3210を使用することができます

IF hour = 30 AND minutes in (. , 0) THEN new_minutes = 30; 
+0

を私が必要とする正確に何だそれ。ありがとう。 –

1

inステートメントを使用することができます。最初のミスヒットの結果を返します。

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

あなたも、基準が満たされていない場合はゼロであることnew_minutesを受け入れることができます提供し、任意のif文なしでそれを書くことができます:

 
data want ; 
    set have ; 
    new_minutes = (hour in(30,60) and minutes in(.,0)) * hour ; 
run ;