2016-10-06 10 views
0

SAS初心者 - 練習を終えようとしています。誰かが私が間違っていることを指摘すると、私はおそらく手のひらに直面するだろうが、今は問題が何であるかは分からない。SAS whereステートメント

私は3つの変数を持つdatsetを持っています:ID $ avgNumDonations DonationAmt。

enter image description here

私は万人の下で20とDonationAmt以下avgDonationとレコードが含まれていないこと(私は私のproc print文でそれをやっている)のサブセットを作成するよう求めています。(私はこれはトリックであると信じて両方の基準を満たし、元のデータセットには例がないと質問)

次のように私は私のwhere句を書いた:DonationAmt> = 1000000とavgNumDonations> = 20

はしかし、それが演技しているように見える をOR文の代わりにAND文を使用します。なぜなら、私のサブセットはIDの45と78を削除します。

誰かが私に行方不明を教えてもらえますか?私が言及したように、基準を満たしている症例はないので、私は「サブセット」に同じ症例があると予想していました。

+0

あなたのコードを教えてもらえますか? – DaveE

答えて

0

WHEREまたはAND/ORロジックを誤解している可能性があります。

ここには包含基準があります。ほとんどすべてのレコードがこの基準を満たしていますが、すべてではありません。 ANDでは両方の条件を満たす必要があります。いずれかがfalseの場合は除外されます。あなたはANDの代わりにORが必要なように思えます。

したがって、除外されるレコードを特定するには、いずれかの条件がfalseになります。したがって、numDonations < 20 - (ID 45)とDonationAmount < 1000000 - ID 78のレコードを探します。したがって、これらの2つのレコードは除外されます。あなたは何を見ているのですか?

0

両方のcriteriasはあなたが使用する必要が条件ORの代わりに、AND満たさなければならない場合は、次の

data a; 
    id=12; 
    avgdon = 58.3; 
    sumdon=4833722; 
    output; 
    id=45; 
    avgdon = 15.3; 
    sumdon=14833722; 
    output; 
    id=56; 
    avgdon = 50.3; 
    sumdon=9833722; 
    output; 
    id=78; 
    avgdon = 39.3; 
    sumdon=833722; 
    output; 
    id=910; 
    avgdon = 28.3; 
    sumdon=2833722; 
    output; 
run; 

proc print data=a(where=(sumdon>=1000000 OR avgdon>=20)); 
run; 

をそれ以外の場合は、使用する正しいANDです。その後、2行が削除されます。

関連する問題