LIBNAME EXCELでSASからエクセルにデータセットを出力する際 dblabel=YESで変数名ではなくラベルがでるようにする

以前、options validvarname=any;のところでLIBNAME EXCELで列名として自由なテキスト出す際に命名規則をanyにして変数名を日本語にしたデータセットをつくれば、あとは出すだけだけど、筋が悪いやりかと、書きました。

じゃあその場合の、正しいやり方は何ですか?と質問をうけたので、それについて書きます。
あ、今回のやつを実行するにはSAS ACCESSのライセンスが必要で、かつ9.2以降です。

今、ラベルのついた以下のデータセットがあったとします。
data Q1;
X='い';Y='ろ';output;
X='は';Y='に';output;
label X='ラベルX' Y='ラベルY';
run;

存在しないパスに対してLIBNAMEを指定して、新しいエクセルファイル「AA.xlsx」を出現させ、
そのままシートA1とA2を作成するコードを実行してlibnameを解除します。
A2のほうには(dblabel=YES)を指定しています。

libname OUTEX "D:\AA.xlsx" header=yes scantext=no;

data OUTEX.A1;
 set Q1;
run;

data OUTEX.A2(dblabel=YES);
 set Q1;
run;

libname OUTEX clear;


そしてエクセルを開いて、2つのシートを比較してみます。

【シートA1】








【シートA2】







といった感じです。

3 件のコメント:

  1. こんにちは。

    ちょっと記事の内容と逸れてしまうかもしれないんですが、、

    libnameでセル範囲指定&「scan_text=no」でやった場合、
    もし出力したい文字が500文字とかのコメントだった場合って、
    excel側のlengthが足りないからか、エラーがでてしまって出力できないんですが、何かオプションとかで回避ってできるんでしょうかね??

    返信削除
  2. コメント有難うございます。

    以下の通りに試してみてください。

    ①libname のオプションでdbmax_TEXT=500をつける(500の部分はなんでも)
    ②modify OUTEX.'Sheet1$'n(dbmax_TEXT=500 dbforce=YES)
     のようにmodifyの部分に()でオプションを入れてみてください。

    それで実行して
    「ERROR: During update: Data value violated the schema for column F1」というエラーメッセージで
    ROLLBACKしてしまうのであれば、

    SASのHotFixをあてて、解決できるらしいんですが、なんか僕のPCうまくインストールすらできなくて
    自己検証できてないのです、、、

    http://support.sas.com/kb/38/816.html

    返信削除
  3. ありがとうございます。

    なるほど。modifyにもdbmax_TEXTを入れるんですね!
    こちらの環境はSAS9.3なんですが、
    該当しそうな9.3のhotfixは前にあててたんですが、やっぱりエラー吐いちゃいますね。。
    もうちょっと調べてみますね。

    返信削除