ヘッダーのないフラットファイルからデータをインポートする既存のプロセスがあります。何百もの列があります。ファイルのプロバイダーは、既存の列内のさまざまなポイントにさらに数百の列を追加しました。古い列と新しい列の名前のリストと、新しい列ではなく古い列のデータ型を適切に設定するSASコードがあります。既存のインポートコードを調べて列ヘッダーとデータ形式を手動で作成する必要はありませんが、これらの部分を使用して新しいヘッダーの新しいインポートコードを取得する方法がわかりません。
data raw_file;
infile "flatfile.csv" delimiter="|" missover dsd firstobs=1;
informat oldcol1 best32.;
informat oldcol2 mmddyy10.;
informat oldcolN $60.;
format oldcol1 best32.;
format oldcol2 mmddyy10.;
format oldcolN $60.;
input
oldcol1
oldcol2
oldcolN $;
run;
現在、Excelファイルにヘッダー情報があります。 old K010H K010I K010J K020A new K010H K010I K010J K010L K010M K010N K020A
あなたの説明に基づいて、私はあなたが新しい列の情報も知っているか、見つけるだろうと思います。その場合は、ファイルを読み取るためのコードを自動生成してみませんか?
ヘッダー情報があるので、次の形式に変更してCSVとして保存できると仮定します。
var infmt
K010H best32.
K010I mmddyy10.
K010J $60.
K010L best32.
K010M mmddyy10.
K010N $60.
K020A best32.
次に、このようなものが自動的にコードを生成し、データを読み取ります。
proc import datafile="cols.csv" out=cols replace;
run;
proc sql;
select var into :cols separated by ' ' from cols ;
select infmt into :infmts separated by ' ' from cols ;
quit;
%macro gen_code;
data raw_file;
infile "flatfile.csv" delimiter="|" missover dsd firstobs=1;
%let ii = 1;
%do %while (%scan(&cols, &ii, %str( )) ~= %str());
%let col = %scan(&cols, &ii, %str( ));
%let infmt = %scan(&infmts, &ii, %str( ));
informat &col &infmt ;
%let ii = %eval(&ii + 1);
%end;
input
%let ii = 1;
%do %while (%scan(&cols, &ii, %str( )) NE %str());
%let col = %scan(&cols, &ii, %str( ));
&col
%let ii = %eval(&ii + 1);
%end;
;
run;
%mend;
%gen_code;
将来的には、ヘッダーのCSVファイルに変更を加えることができ、残りはコード自体によって処理されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加