2017-10-17 17 views
2

このコードでは、「整数定数が必要です」というエラーが表示されます。どうして?これはかなり簡単で、()が小数点では機能しないと言っているものは見つかりませんでした。どこかに "do"が必要ですか?ありがとう。IN関数は小数点では機能しません

data clustered; 
    set combd; 

if (avpm in(393821:450041) or avpm in(337601:393821) or avpm in  
    (225161:281381)) and fsp in (.8768:1) then class='1'; 

if (avpm in(112720:168940) or avpm in(56500:112720) or avpm in 
    (280.06:56500)) and fsp in (.8768:1) then class='2'; 

if avpm in(280.06:56500) and (fsp in (.507:.6303) or fsp in (.3838:.507) 
    or fsp in (.2606:.3838)) then class='3'; 

if avpm in(280.06:56500) and (fsp in (.1373:.2606) or fsp in 
    (.0141:.1373)) then class='4'; 

if avpm in(280.06:56500) and fsp in (.8768:1) then class='5'; 

if avpm in(280.06:56500) and (fsp in (.8768:1) or fsp in (.7535:.8768) or 
    fsp in (.6303:.7535)) then class='6'; 

run; 

答えて

1

INは小数点では機能しません。

実際には、INはおそらくあなたが思っていることをしません。

IN()はSAS documentation on operatorsによれば、以下のないオペレータである:リストの一の

listに等しい

。つまり、最初と最後の間に数字があることを言っているわけではありません。むしろ、整数のリストとして開始点を終わりまで広げ、それがそのリストにあるかどうかを評価しています。そのページのさらに下には、The IN operator in numeric comparisonsが表示されます。

簡略表記を使用して、検索する順次整数の範囲を指定できます。範囲は、検索するリストの値として構文M:Nを使用して指定します.Mは下限、Nは上限です。 MとNは整数でなければならず、MとNとMとNの間のすべての整数はその範囲に含まれます。

重要なことに、整数ではない数値は、定義どおりこの範囲には含まれません。そう:3.5リスト(2,3,4)にないよう

3.5 in (2:4) 

は、falseです。

data test; 
    x = 3.5; 
    y = x in (2:4); 
    put x= y=; 
    stop; 
run; 

x=3.5 y=0 

あなたがやりたいgeおよび/またはle(またはgtおよび/またはlt)を使用する必要があります。

0.8768 le fsp le 1 

あなたはそれらのように一緒にチェーンすることができます。それでまだ比較的書くのは簡単です。

+0

ありがとうございました。理にかなっている。 – mbs23

+0

in演算子は、離散的に指定されている場合、10進数のリストで動作します。例えば、xが0.5の場合、 'x in in(0、0.5、1)'が真となります。あなたは本当にSASが無限の数字のセットと一致するとは思えません。 – david25272

関連する問題