2016-09-12 5 views
1

私はSASを初めて使い、現時点でそれを学んでいます。 私は、infile文にDSDオプションとDLMオプションの両方を使用できることを読んだ。SASでDLMとDSDを同時に使用する

しかし、複数の区切り文字を持つデータで以下を実行するとエラーが発生します。

コード:

data test; 
infile cards dlm='@' dsd; 
input pid visit $ dose; 
cards; 
101,vis1"0.05 
102,vis2,0.1 

エラー:

NOTE: Invalid data for pid in line 254 1-8. 
RULE:  ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8--- 
255  102,vis2,10mg 
NOTE: Invalid data errors for file CARDS occurred outside the printed range. 
NOTE: Increase available buffer lines with the INFILE n= option. 
pid=. vist=05mg drug=102,vis2 _ERROR_=1 _N_=1 
NOTE: SAS went to a new line when INPUT statement reached past the end of a line. 
NOTE: The data set WORK.MH1 has 1 observations and 3 variables. 
NOTE: DATA statement used (Total process time): 
     real time   0.00 seconds 
     cpu time   0.00 seconds 

256 ; 

あなたは私の知識を構築するために、これを理解する上で私を助けていただけますか?

答えて

1

ここでの問題は、DLMが '@'(フィールド区切り文字が@文字だと言う意味)ですが、データには区切り文字(カンマ)として '、'が表示されます。

このように、SASはhta( "102、vis2,10mg")のすべてを1つの数値フィールド(pid)に読み込もうとしています。 dlm=','に変更するか、別のデータを使用する必要があります。

+0

ジョー、私は同じ時間にdlmとdsdを使うことができると読んだので、上記を試しました。私がDSDを使用するのはなぜですか?カンマ区切りは区切られません。 – user2075017

+1

'DSD'はカンマ区切りとは関係ありません。 「DSD」は、SASにいくつかのことをさせる。主なものは、区切り記号ではなく、一致する引用符で囲まれた区切り記号を扱うことである。したがって、102、訪問、看護師の意見は「10mg」では2番目の欄のカンマのために正しく読み込むためにDSDが必要です。しかし 'DSD'はどんな区切り文字でも同様に動作します - ' 102 @ "[email protected]" @ 10mg'は 'dlm = '@' DSD'オプションでうまく動作します。 – Joe