2016-07-13 4 views
0

私はこの問題がかなり解決しやすいRからSASに来ています。PROCで文字列で空の値を指定するIMPORT

%Macro機能を持つCanSim CSVファイル(1つはexample table here)を読み込もうとしています。

%Macro ReadCSV (infile , outfile); 
PROC IMPORT 
     DATAFILE= &infile. 
     OUT= &outfile. 
     DBMS=CSV REPLACE; 
GETNAMES=YES; 
DATAROW=2; 
RUN; 
%Mend ReadCSV; 
%ReadCSV("\\DATA\CanSimTables\02820135-eng.csv", work.cs02820135); 
%ReadCSV("\\DATA\CanSimTables\02820158-eng.csv", work.cs02820158); 

問題は、数値Value列が持っている「..」すべてのCSVの値が欠落している時はいつでもです。これは、IMPORTがこの文字列で行を取得したときにエラーを生成しています。

IMPORTに「..」を削除するか、欠損値として扱うべきかを教える方法はありますか? (私はDSDオプションを参照してフォーラムを見つけましたが、それはここで私を助けるようには思われません)

ありがとう!

+0

ファイルのレイアウトは毎年同じですか?もしそうなら、ファイルを読むためのデータステップを書くだけでよいのです。次に、データの読み込み方法を制御できます。 – Tom

+0

正確に何を意味するのかわかりませんが、いいえ(?):各CSVファイルでは、行はファイルごとに異なる位置と時間でインデックスされます。列(番号とその名前)が異なります。しかし、類似点があります。たとえば、数値は常に「値」という列にあります。それが私を助けますか? –

+0

SASログを貼り付けてください。 SASログには、使用されたインポートおよびデータステップに関する情報が表示されます。これをテンプレートとして使用して、動作を変更できます。 – Altons

答えて

3

PROC IMPORTは、データの構造のみを推測できます。たとえば、..が表示され、その列に数値ではなく文字列が含まれていると仮定します。また、生成されたデータセットを役に立たなくする可能性のある他の決定も行うことができます。

ファイルを読むための独自のデータステップコードを書くことをお勧めします。それほど難しいことではありません。あなたの例のリンクファイルは、CSVファイルの最初の行をコピー&ペーストしてカンマを削除し、有効な変数名を作成し、文字変数を作成する時間を推測します。

data want ; 
    infile "&path/&fname" dsd truncover firstobs=2 ; 
    length Ref_Date $7 GEO $100 Geographical_classification $20 
     CHARACTERISTICS $100 STATISTICS DATATYPE $50 Vector Coordinate $20 
     Value 8 
    ; 
    input (Ref_Date -- Value) (??) ; 
run; 

??修飾子は数にVALUE列のテキストを変換をしようとしたときにエラーを報告しないようにSASを教えてくれます。そのため、ファイル内の..とその他のガーベジは、欠損値を生成します。

+0

優れています。 '?'修飾子は必要なもののようです。どうもありがとう –

0

あなたの問題が「N」または「D」またはそれに類するものであれば、ほんの少し簡単な解決策があります:missing statement(重要な点はmissing optionとは異なります) 。

欠損値としてデータにおける単一の文字 Mを参照して、それに応じてそれを読むためにSASを伝え
missing M; 

.Mという特別な値がありません。これは機能的には.の規則的な行方不明に似ています(ただし、等価命令では実際には同じではありません)。

関連する問題