文字列と数値の両方の項目を含むデータを、
で出力したいです。
今現在は%ds2csv を使いダブルクォーテーション括りで出力したファイルを、外部コマンドを実行しUTF8(BOMなし)に変換することで実現していますが、より効率的な方法があればご教授いただけないでしょうか。
数値変数をクオート付きで出力するのは面倒なので、そのままds2csvを使いつつ、
出力されたファイルをutf-8nに変換してはいかがでしょうか。
%let csvfile1=%sysfunc(pathname(work))\_tmp_.csv;/* テンポラリ出力 */
%let csvfile2=c:\temp\test.csv;
%ds2csv (data=work.test, runmode=b, csvfile=&csvfile1);/* テンポラリに出力 */
filename incsv "&csvfile1";
filename outcsv "&csvfile2" encoding='utf-8' nobom;
data _null_;
infile incsv;
file outcsv;
input;
put _infile_;
run;
効率のいい方法、というのが具体的にどのようなことを期待しているのかがわかれば、別の方法が提案されるかもしれません。
(例えば、外部コマンドでやっていることをなくしたい、sasだけで処理を完結させたい、等)
数値変数をクオート付きで出力するのは面倒なので、そのままds2csvを使いつつ、
出力されたファイルをutf-8nに変換してはいかがでしょうか。
%let csvfile1=%sysfunc(pathname(work))\_tmp_.csv;/* テンポラリ出力 */
%let csvfile2=c:\temp\test.csv;
%ds2csv (data=work.test, runmode=b, csvfile=&csvfile1);/* テンポラリに出力 */
filename incsv "&csvfile1";
filename outcsv "&csvfile2" encoding='utf-8' nobom;
data _null_;
infile incsv;
file outcsv;
input;
put _infile_;
run;
効率のいい方法、というのが具体的にどのようなことを期待しているのかがわかれば、別の方法が提案されるかもしれません。
(例えば、外部コマンドでやっていることをなくしたい、sasだけで処理を完結させたい、等)
こんにちは。コミュニティの活用、ありがとうございます。
引数においてCSVFILEの代わりにCSVFREFを指定すると、直接FILENAMEステートメントで
定義した名前を利用することができます。
filename a "C:\temp\test_utf.csv" encoding="utf-8" nobom;
%ds2csv(data=sashelp.class, runmode=b, csvfref=a);
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!