2016-04-04 5 views
0

SASについてif what if statement。耐性を持つ観測が何場合は、それらの間に隙間を持っていませんが、ただ、これは私たちが実行しているプログラムであると言う私たちは常に確認してくださいデータ間隔をすべきである知っているSAS分析データの間隔が空白の場合

data work.stress; 
infile tests; 
input ID Name $ Tolerance; 
if tolerance <= 5 then tolerance = "Low"; 
else if tolerance >= 6 then tolerance = "High"; 
run; 

:我々は次のプログラムを持っていることを言います5.5?出力に構文エラーが表示されますか?

ありがとうございます!

JessX

答えて

0

if-then-elseを使用して/ else文があれば特に合うように失敗に起因するいかなる構文エラーがありません。それは何もしません。あなたのケースでは、toleranceの値が5.5の場合は元の値になります。あなたは通常、不足している特別なを使用したいが、これは、一般的に(あなたは分析から除外これらの極端な値をしたいと仮定すると)、あなたは極端な値を検閲したい場合に行われることになります。

data work.stress; 
    infile tests; 
    input ID Name $ Tolerance; 
    if tolerance <= 5 then tolerance = .L; 
    else if tolerance >= 6 then tolerance = .H; 
run; 

(実際には、それがします

select-whenを使用している場合は、可能なすべての値を考慮する必要があります - もしあなたがそれを数値として定義しているので、 "高" "低"グループの値が欠落しています。 otherwiseがない場合は、whenに該当しない値では失敗します。これはselect-whenを使用すると便利な理由の一部です。

0

エラーがありますが、理由はありません。数字を文字列で置き換えると、SASはそれを許可しません。

二つの可能な手段:

  1. は、あなたがあなたのしきい値を指定proc formatを使用してフォーマットを宣言します。あなたの閾値の亀裂の間にある値はそのまま(数値)表示されます。
  2. 新しい変数を作成します。

    data work.stress; 
        infile tests(rename=(Tolerance=Tol_num)); 
        input ID Name $ Tolerance; 
        format tolerance $8.; 
        if tol_num = . then tolerance = "?"; 
        else if tol_num <= 5 then tolerance = "LOW"; 
        else if tol_num >= 6 then tolerance = "HIGH"; 
        else tolerance = "MID"; 
        drop tol_num; 
    run; 
    
    :あなたは「MID」カテゴリを追加しない限り、新しいtolerance変数の欠損値を持つことになります5と6の間にあるものは何でも、この例では、

関連する問題