2016-10-07 8 views
1

大きなテーブルのサブセットであるSASでテーブルを作成しようとしています。私は例として次の図を使用しています。ご覧のように、columnAは501と502が2回繰り返されています。私が望むのは、ColumnBの最大数を持つ行を選択することです。 2番目のグラフは私が望む結果です。私が今考えています何SASで条件付き選択

チャート1

A  B  C 

501  1  O 

502  1  K 

503  1  V 

501  2  Y 

502  2  U 

504  1  I 

チャート2

A  B  C 

503  1  V 

501  2  Y 

502  2  U 

504  1  I 

は次のとおりです。

PROC SQL; 
CREATE TABLE CHART2 AS 
SELECT 
C.COLUMNA, 
C.COLUMNC 
FROM CHART1 C; 
QUIT; 

私は重複があるときと言うことかわかりませんcolumnAの行は、columnBが最大値を持つ行のみを選択します。テーブルのフォーマットはちょっと変わったものです。私はあなたが私のポイントを得ることを望む。

答えて

0

proc sqlhaving句を使用することもできます。グループ化が完了した後に適用されるフィルタと考えることができます。上記のコードで

proc sql noprint; 
    create table want as 
    select * 
    from sashelp.class 
    group by sex 
    having age = max(age) 
    ; 
quit; 

(我々は性別によりグループ化されているように)、我々は、その性別の行上の年齢の値が最大年齢に等しい行(max(age))を維持しています。

女性の年齢に等しい年齢を持つレコードが2つあり、男性の場合は1つのレコードしかないため、女性の場合は2つの行が返されます。

あなたのデータについての詳細がなければ、私はこれがあなたのニーズにちょうど適合することは確かではありませんが、そうかもしれません。あなたはこの試みることができる

+0

あなたは正しいです!どうもありがとうございました!私は選択文でmaxを使用していました。これはcolumnAによってchart1グループからselect columnA、max(coumnB)のように見えます。ただし、選択にcolumnCを含まない場合にのみ機能します。 –

+0

@ mumuWこの回答があなたの質問を解決する場合は、それを受け入れたものとしてマークしてください(投票の上下ボタンの隣に緑色のチェックマークがついています)。 –

0

PROC SORT data = Chart1; 
    by A descending B; 
RUN; 

DATA Chart2; 
    set Chart1; 
    by A; 
    if first.A then output; 
RUN; 

を最初のステップは、Aの昇順でデータをソートし、次にBの降順で第二段階は、Aの各値に対して最初の行のみを保持します