2016年9月29日木曜日

sasにもともと入ってるマクロの話

annotate macroの話です
毎度仕様を忘れて手こずるので書いときます
適宜追加するかもです

使うとき
%annomac;を宣言してあげます
これ書かないとマクロと認識してくれません

グラフとかに出力する場所の設定
  %system(3,3,3);
 *以降で指定する数字を百分率として扱います。画面を100%と見たときの割合で場所を指定できるようになります。
当然XとYに100を超える値を、これより下のannotate macroで指定したらERRORでます;


  %system(2, 3, 3);
 *以降で指定する数字は絶対値として扱います。グラフの軸の値に従って指定できるので便利です。;


グラフとかに文字を追加する

     %label(6    , 98  , "hogehoge"   , black,  0   , 0  ,  3.0   , 'MS Mincho',  5            ); 
 *%label(X,Y,"出力する文字列", 色   , 文字列の角度(0 - 360),文字の角度  , 文字size ,  font      , position(1-9) );

20161118更新_間違ってました。以下の数字以外は今度追加します
    /* positionについて
    4 = 中央   (右)
    5 = 中央   (真ん中)  標準値
    6 = 中央   (左)
    */
201611118更新ここまで


グラフとかに線を追加する
    %line( 1        , 30    ,  1       ,  28.5    , black , 1   , 0.15   ); 
   *%line(始点x , 始点Y , 終点X , 終点Y , 色    ,線種 ,線の太さ);
線種はいろんな数字を指定できます。1が実線で、あとは点線の具合が変わります。
線種はそこそこ多くの指定ができます。なんなら二桁とかもいけます。

仕様を忘れる筆頭のREPORTプロシジャとGPLOTプロシジャについても上げたいですね

2016年9月16日金曜日

文字の日付をSAS日付値にする

これもずいぶん手垢のついたネタですが、先日引っかかったので投稿します。

要は2015-12-04T05:00のようなデータをSAS日付値にする話です。

data hoge;
  AA = "2015-12-04T05:00";
   HOGET=input(AA,e8601dt.);
run;

とするだけの話です。
引っかかったのは元の文字の日付をほかのデータセットから読み込む時に
文字の前後にブランクでも入っていたのでしょうか
inputを実行したら、ERRORが出て通らなかったのですね。

最後は読み込んだ文字変数にstripを使って前後のブランクを取り除いたことで(?)inputが通りました。

いまだにいまいち原因がわかっていないのですが、とりあえず通ったのでよしとしています。
文字変数に欠測データもいなかったので、errorが出ると思っていなくてびっくりしました。


20160927更新

SAS9.4で実行したらERRORなくいきました。
日付値に秒が入っていないことがERRORの原因ぽいです。
それにしてもstripかますと動くことの説明にはなりませんが・・・・
SAS9.4なら秒が日付値に入っていなくても滞りなく動くみたいです。

20170510更新
spritではなくcatsを使ってもinputが通りました。
相変わらずこれの原因、解決策がわかりません