%macro inputcsv( infile = , /* 入力ファイル名または参照名 */ out = _csv_ , /* 出力SASデータセット名 */ lrecl = 10000 , /* 入力ファイルの最大長 */ dlm = '09'x , /* デリミタ文字の指定. '09'x はタブ */ infileop = dsd , /* infile 文のオプション */ firstobs = 2, /* データ開始行の番号 */ varobs = 1 /* 変数名のある行番号 */ ) ; /*------------------------------------------------------------- CSV形式のテキストファイルで,先頭1行目に変数名のある場合に, それを変数名としてSASデータセットを作成する.DATAステップ を書かずにCSVファイルをSASデータセットに変換できる. デフォルト:1行目に変数名,2行目以下はデータ行でタブ区切り. 制約:「変数名の先頭行>200バイト」への対応はしていない. 変数名の行には有効なSAS変数名がなければいけない. AUTHOR : SUZUKI Tokuhisa DATE : 2000-10-8 -------------------------------------------------------------*/ %let errorbit = 0 ; %if &infile = %str( ) %then %do ; %put ERROR: infile = option is required . ; %goto endmac ; %end ; options nonotes ; data _null_ ; infile &infile firstobs = &varobs obs = &varobs length = len lrecl = &lrecl ; input v $varying200. len ; if len >= 200 then do ; put "ERROR: TOP line of input file : &infile > 200 byte ." len = ; call symput( 'errorbit', '1' ) ; stop ; end ; v = translate( v, ' ', &dlm ) ; call symput( 'varlist', trim( v ) ) ; run ; options notes ; %if &errorbit = 0 %then %do ; %put NOTE: delimiter code = %str(&dlm) . ; data &out ; infile &infile &infileop firstobs = &firstobs dlm = &dlm lrecl = &lrecl ; input &varlist ; run ; %end ; %endmac: %mend inputcsv ;