2016-05-05 3 views
1

A-B-Cの順序で誰が見つかっているかを知る必要があります。例えば表を確認してください。私は必要なものSASが順序変数を見つける

id   term  grade  subj  num 
10   2002  D   332  1 
10   2002  A    333  2 
11   2005  C    232  1 
11   2005  A    232  2 
11   2005  B    232  3 
11   2005  C    232  4 
15   2010  A    130  1 
15   2010  B    130  2 
15   2010  C    130  3 
20   2000  B    500  1 
20   2000  A    500  2 
20   2000  C    500  3  

テーブルがIDですfromthis:11および15

出力はので、私はそれで 'A' の等級を持っていたidを一覧表示必要

id term subj 
    11 2005 232 
    15 2010 130 

ようにする必要があります「B」に変更された後、「C」に変更されました。 番号は順序通りである可能性があります。それは1から始める必要はありません、それは1または2または3などとなることができます。しかし、それはAの次にBの次のCでなければなりません ID番号を見る必要はありません。順不同。

答えて

0

単純な 'A' - 'B' - 'C'シーケンスをお探しの場合は、LAG()関数で十分です。それが私が下の例で示すものです。より多くのシーケンス(例えば、 'A' - 'B'、 'B' - 'C'、 'A' - 'C' - 'D')を探している場合は、もしそうなら、私はそれに応じて答えを編集します。 IF条件にそれらを折るません - LAG機能は、独自のラインで評価し、上記のように、変数に格納されなければならないことを

DATA d1; 
    INPUT 
     id :8. 
     term :8. 
     grade :$2. 
     subj :8. 
     num  :8. 
    ; 

    DATALINES; 
     10   2002  D   332  1 
     10   2002  A    333  2 
     11   2005  C    232  1 
     11   2005  A    232  2 
     11   2005  B    232  3 
     11   2005  C    232  4 
     15   2010  A    130  1 
     15   2010  B    130  2 
     15   2010  C    130  3 
    ; 
RUN; 



DATA d2 (
    KEEP = id term subj 
); 
    SET d1; 

    grade_previous_1 = LAG1(grade); 
    grade_previous_2 = LAG2(grade); 

    IF (grade = 'C' AND grade_previous_1 = 'B' AND grade_previous_2 = 'A'); 
RUN; 

注:以下は

は、実装を示すテストプログラムでありますそれとも必ず実行されるとは限りません。実際にこの例では動作します

IF (grade = 'C' AND LAG1(grade) = 'B' AND LAG2(grade) = 'A'); 

を一般的には、それはIF条件のLAG()外を呼び出し、一時変数に結果を格納するのが習慣に取得すると良いでしょう:それは、言うことはありませんされています。

+0

サンプル出力には成績が表示されません。私には、 'A' - 'B' - 'C'シーケンスを含むレコードセットの 'id'、' term'、 'subj'だけが必要だったようです。また、私はコードを短縮しました。 –

+0

はい、あなたはそれが順序ではないと述べた。私はそれを必要とします。もし私が 'グレード'の部分を削除すると、私は何を追加する必要がありますか? – beren

+0

ドン;最初のコメントを心配して、私は削除しました。私は間違っていましたが、AからB、Cの順に出力が必要です。 – beren

関連する問題