2017-10-07 13 views
0

ではセルのエントリと戻り値を比較したいだけです。 、030現れる前の値の最小数を、各CUSTOMER_NO
ため(値> 030)を有するIDをカウントする方法セルのエントリと戻り値を比較するSAS

coustmer_NO id A1 A2 A3 A4 
1   5 10 20 45 0  
1   13 0 45 2 5 
2   4 0 10 7 8 
2   3 7 9 55 0   
2   10 0 0 0 0 
3   4 90 8 14 3    
3   10 20 7 4 15  

期待される出力は次のようなものになるだろう:私はより多くの垂直構造への変換をお勧めします

cosutmer_no , count_ac_num , values 
1     2   1  
2     1   1 
3     1   3 
+0

これは、私はまだそれで問題に直面し、それを実行しようとしているSQLよりもデータの段階で優れているとSUBSTR – Reeza

+0

を使用。 –

+0

投稿した番号の論理を説明してください。値> 30を数えると、顧客2には1つしかない場合に3が表示されます。そしてなぜ顧客3は0を持っていますか? – Tom

答えて

0

。その後、ビジネスロジックの適用を開始することができますが、それが何であるかを理解するのは難しいです。引用符は意味がないと仮定すると

(誰かがCSVファイルに書き込まれたことで、実際の引用文字と、それは"""xxx"""になったので、既存の引用符を保護するために追加ので、余分な引用符を持っていた"xxx"のような文字列を持っていたように見えます)それらを削除するにはcompress()関数を使用することができます。

これで、結果の文字列を3文字の部分文字列に分割できます。

data want ; 
    set have ; 
    array h history1 history2 ; 
    do history=1 to dim(h); 
    h(history)=compress(h(history),'"'); 
    length index 8 value $3 ; 
    do index=1 by 1 until (value=' '); 
     value=substrn(h(history),3*(index-1)+1,3); 
     if value ne ' ' then output; 
    end; 
    end; 
    drop history1 history2; 
run; 

ですから、このようなもので終わる:

Obs id type history index value 

    1  1  13  1   1  STD 
    2  1  13  1   2  STD 
    3  1  13  1   3  058 
    4  1  13  1   4  030 
    5  1  13  2   1  STD 
    6  1  13  2   2  030 
    7  1  13  2   3  066 
    8  1  13  2   4  036 
    9  1  13  2   5  030 
10  1  13  2   6  STD 
11  1  13  2   7  STD 
12  1  13  2   8  STD 
13  1  13  2   9  STD 
14  1  13  2   10  STD 
15  1  3  1   1  STD 
16  1  3  1   2  STD 
17  1  3  1   3  STD 
18  1  3  1   4  XXX 
19  1  3  1   5  STD 
20  1  3  1   6  XXX 
21  1  3  1   7  S 
+0

こんにちはTom、ありがとうございました。私は新しい形式に変換する必要があります。もう一度質問をしてください。 –

関連する問題