2016-07-29 10 views
0

データセットに「a」という名前の列があり、その列を「AVG_OPT_PR」= '。そして、次のコードは動作します:SASのデータの一部を削除する

DATA work.a1; 
    SET work.a; 
    IF AVG_OPT_PR = '.' THEN delete; 
RUN; 

はしかし、「期間」と呼ばれる別の列があり、私はちょうどその1つの場所内の、すべての「AVG_OPT_PR」=行を削除したいです「」。どうやってやるの?例えば

は、データがどのように見える:

したがって
Location_id |  Period | AVG_OPT_PR 
------------+-------------+----------- 
    L_1  | 2 weeks  | 105 
    L_1  | 1 month  | . 
    ...  | ...  | ... 
    L_1  | 1 year  | 103 
    L_2  | 2 weeks  | . 
    L_2  | 1 month  | . 
    ...  | ...  | ... 
    L_2  | 1 year  | . 

、位置IDが "L_2" に等しい行が削除されているが、 "L_1" のすべてのデータが保持されます。

ありがとうございました!

答えて

0

AVG_OPT_PR.Location_idL-2の行を削除するだけの簡単な方法があれば、これでうまくいくはずです。

DATA work.a1; 
    SET work.a; 
    IF AVG_OPT_PR = '.' and Location_id = 'L_2' THEN delete; 
RUN; 

そして、あなたは.AVG_OPT_PR、どこでそのLocation_idL_1等しい(そうL_1以外のすべて)ないをしてすべての行を削除するにはIF THEN DELETE

でこれを処理できる方法を拡張するためにいくつかの追加の例

DATA work.a1; 
    SET work.a; 
    IF AVG_OPT_PR = '.' and Location_id ^= 'L_1' THEN delete; 
RUN; 

AVG_OPT_PRのすべての行を削除するそのLocation_idは、(それはのように出てくる。、maxが欠落している場合)、再び第1のデータセットにそれをマージIN ('L_2','L_3','L_4',...)

DATA work.a1; 
    SET work.a; 
    IF AVG_OPT_PR = '.' and Location_id IN ('L_2','L_3','L_4') THEN delete; 
RUN; 
+0

ありがとうございました!このようにして動作しますが、それを一般的にするにはどうすればいいですか?例、Location_idがたくさんありますか? –

+0

@CrubalChenxiLiあなたが現在行っているようにそれをどのように扱うかについてのいくつかの例を追加しました。希望が助けてくれる – Etheur

+0

ありがとう!私の場合、4000以上のlocation_idがありますが、 "Location_id IN( 'L_2'、 'L_3'、 'L_4'、...)以外のものを書くことはできますか? –

1

location_idためavg_opt_prの最大値を選択 列挙されたものの一つであります次に、最大値が失われているlocation_idsをすべてドロップします。

proc sql; 
    create table a2 as select distinct 
     location_id, max(avg_opt_pr) as avg_opt_pr_max 
     from a1 
     group by location_id; 
quit; 

proc sql; 
    create table a3 as select 
     a.*, b.avg_opt_pr_max 
     from a1 as a 
     left join a2 as b 
     on a.location_id = b.location_id; 
    delete from a3 where missing(avg_opt_pr_max); 
quit; 
+0

ありがとう!私はあなたの論理を得る。最初の部分は、テーブルa2を生成するときにうまくいきます。実行しようとしている間、ログファイルには次のように書かれています。列location_idはaの相関名に見つかりません。 –

+0

あなたのサンプルが "work.a1"をサンプルデータセットとして使用していたので "a1"を使用しました。そのデータセットを取得していない場合は、「a1」を実際に引き出しているデータセットに置き換えます。 – superfluous

+0

エラーが発生したときにも置き換えました。ありがとう! –

関連する問題