ジョーのように、私は興味をそそられました。あなたが望むことをするようには見えませんPROC EXPORT
。しかし、次の SAS マクロでうまくいくかもしれません。
%macro mydlm(dsn, outf, dlm, headers);
/*****************************************************************
MYDLM.SAS
SAS Macro to create a delimited file from a SAS data set
Positional Parameters
DSN = SAS Dataset Name
OUTF = Output Text File
DLM = Delimiter to use (CSV, TAB, PIPE, or constant)
HEADERS = Y or N, Include line with variable names at top
Example
%mydlm( sashelp.class , 'c:\temp\tempfile.csv', csv, Y);
****************************************************************/
%if %QUPCASE(&DLM)=CSV %then %let DLM=%str(,);
%else %if %QUPCASE(&DLM)=TAB %then %let DLM='09'x;
%else %if %QUPCASE(&DLM)=PIPE %then %let DLM=%str(|);
proc contents noprint data=&DSN
out=_temp_(keep=name type length varnum label format formatd formatl);
run;
proc sort data=_temp_;
by varnum;
run;
data _null_;
set _temp_ end=eof;
call symput(cats('zvnm',put(_n_,5.)), name);
if format ne ' '
then call symput(cats('zvft',put(_n_,5.))
, cats(format
, put(formatl,best.), '.'
, put(formatd,best.))
);
else if type=2
then call symput(cats('zvft',put(_n_,5.)),cats('$char',put(length,best.),'.'));
else call symput(cats('zvft',put(_n_,5.)),' ');
if eof then call symput('zvcnt',left(put(_n_,8.)));
run;
data _null_;
file &outf;
set &dsn;
%if %upcase(&headers) = Y %then %do;
if _n_ = 1 then put
%do i =1 %to %eval(&zvcnt.-1);
"'%trim(&&zvnm&i)'" "&dlm"
%end;
"'%trim(&&zvnm&zvcnt)'" ;
%end;
put
%do i =1 %to %eval(&zvcnt.-1);
&&zvnm&i &&zvft&i "&dlm"
%end;
&&zvnm&i &&zvft&i;
run;
%mend mydlm;
このマクロでは、区切り文字として CSV、TAB、またはパイプ (|) を選択できます。文字変数では先頭の空白が保持され、すべての変数の幅は定義済みの SAS 変数形式に基づきます。このサンプルでマクロをテストしました。
data a;
number2 = 2;
format num comma7.;
format date yymmdd10.;
format char $char40.;
date = today();
num = 1; char = ' This has 10 leading blanks'; output;
num = 2; char = 'This has no leading blanks'; output;
run;
%mydlm( a , 'c:\temp\tempfile.csv', csv, y);
更新:信用を与えるために、上記のコードは、この Web ページで見つけたアイデアから派生したものです。そのリンクを指摘しただけですが、実際にはあなたが望んでいることはしませんでした。読むのも本当に大変です。
UPDATE2 : サンプル マクロを修正して、構文エラーを修正し、より一般的なものにしました。この新しいバージョンでは、列区切り文字として任意の文字列を指定できます。この他の Stack Overflow questionをサポートするためにこれを追加しています。これは、次のマクロ呼び出しを使用して回答できます。
%mydlm( Exp_TXT, '/fbrms01/dev/projects/tadis003/Export_txt_OF_New.txt', ~|~, Y);