2016年8月24日水曜日

PUTステートメントで、変数値の先頭にある半角スペースが消えてしまう




以前いただいた質問です。以下の例をご覧ください。

*** サンプルデータ ;
data DT1;
  A="aaaaa"; output;
  A="  bbb"; output;
  A="  ccc"; output;
run;

  A  
aaaaa 
  bbb 
  ccc



上の例で2~3行目の変数値の先頭には半角スペースがあります。
これを以下のようにPUTでログに出力してみると、、

*** 変数Aをログに吐いてみる ;
data DT2;
    set DT1;
    put A;
run;

ログ
aaaaa
bbb
ccc

先頭の半角スペースが消えてしまいます。このスペースを残すにはどうしたら良いでしょうか?



解決案


(変数にはFORMATが割り当てられていない前提です)
data DT2;
   set DT1;
   put +(kverify(A," ")-1) A;
run;

ログ
aaaaa
  bbb
  ccc



解説
「KVERIFY関数」と 「カラムポインタコントロール機能」 を使ってみました。
(KVERIFYについては以下記事で紹介しているので参照下さい)
・ VERIFY(KVERIFY)関数の紹介


   put +(kverify(A," ")-1) A;


上の青文字部分では「KVERIFYで半角スペース以外の文字が最初に出現する位置-1」、つまり先頭の半角スペースの数を求めています。

 
   put +(kverify(A," ")-1) A;


PUTステートメントで 「+(式)」とすると、式の結果の値(数値)の分だけポインタを移動させてくれます。
つまり変数Aの先頭の半角スペースの分だけ右にポインタを移動させてから、Aの値を出力しています。




0 件のコメント:

コメントを投稿