2017年10月15日日曜日

9.4のメンテナンスリリース5がでてるやんけぇと言う話

出てますね,9.4M5.
日本語での案内ってでますかねこれ.
イマイチ見当たらないんですが.
sas studioも9.4M4なので実際に触れないのですが,いくつか新機能が出ているようです.
そのうちの二つを紹介しようと思います.

proc dstods2 がそのうちの1つです.
なんでもデータステップをDS2言語に変換して出力するプロシジャのようです.
inにsasプログラムをよみこんで,outから「.ds2」形式のファイルを出力するようです.
データステップのhashも一部対応してるよ!(Partial support for the hash object. )
とのことなので実際にいろいろ変換してみたいのですが,いかんせん9.4M5が触れないですね
幾つか未対応の機能もあるようなので,そこは気を付けたいところです.

該当のdocument
<http://documentation.sas.com/?cdcId=pgmsascdc&cdcVersion=9.4_3.2&docsetId=proc&docsetTarget=p0zok9sr2a2t46n1r8zfuw5145t5.htm&locale=ja>

取りあえず以下はsasのdocumentから引っ張ってきた例です.

data _null_;
   length x y z w 8;
   set x;
   by x--z w;
   put x=;
run;

このデータステップをdsex1.sasに保存して

proc dstods2 in="dsEx1.sas" out="ds2Ex1.ds2"; run;

上のプロシジャに掛けると,
下の様なコードがds2ex1.ds2として出力されるようです.

data _NULL_;
  dcl double X;
  dcl double Y;
  dcl double Z;
  dcl double W;
  method run();
  set X;
  by  /* X--Z */ W;
  put X=;
  ;
  _return: ;
  end;
enddata;

もう一つはgzフォルダにfilenameステートメントでアクセスできるようになったようです.
filenameステートメントのzipオプション下でgzipオプションをつければアクセス可能になるとのこと.
ただgzipオプションとmemberオプションの両方を書くと,memberオプションは無効になるようですね.

と言うか9.4からZIPにはアクセス出来るようになってたんですね.
そこすら知らなかったです.

filename foo ZIP 'U:\directory1\testzip.zip' member="test1.txt" 
これで指定したzipの中のtest1.txtにアクセス出来るらしいです.

該当のdocument
<http://documentation.sas.com/?cdcId=pgmsascdc&cdcVersion=9.4_3.2&docsetId=lestmtsglobal&docsetTarget=n1dn0f61yfyzton1l2ngsa1clllr.htm&locale=ja#p0c653wf2di4jln10vjxwuub1ptz>


後はviyaを見据えた変更点がありそうなくらいですかねぇ
にわか知識なのであまり詳しいことはわかりませんが.
日本語の記事とかあったら知りたいです.

2017年10月10日火曜日

sas studioにログインできなかった話

まさかの月に複数回更新

久しぶりにSAS studioにログインしようとすると入れませんでした.
どうもライセンスを更新しないといけない様子です
sasのsupportページ<https://support.sas.com/ondemand/caq_new.html>の
「general questions」のところに記載がありました.

Q.
I am unable to sign on to the Control Center or other SAS OnDemand for Academics software applications.

A.
You may be using a mixed or upper-case user ID. Only lowercase values are acceptable for your user ID. Additionally, you may be using the wrong password or your account may be disabled. You must renew your license agreement each year. Your account will be disabled if you fail to renew.
  •  If you have forgotten your password or wish to reset it, see What should I do if I forget  my password?
  •  If you have reset your password and are still unable to sign on, you can sign on to the Registration application and update your license agreement. After that,    you can try to sign on again.
  •  If you have tried both of these items and are still unable to sign on, then you can send e-mail to SASAnalyticsU@sas.com to receive technical support.

二つ目の○のところに,「update your license agreement」と書いてあります.
Ansの部分の概要に,「You must renew your license agreement each year.」とあるので,一年に一回はライセンスを更新しないといけないようです.

/*----- 20190110追記 ------*/
ココ勘違いしている気がします.年一回アカウントの更新が必要なのではなく,年に一回はログインしないとアカウントの更新が必要になるんじゃないでしょうか.
どっかでログインしていればアカウントの更新をしなくてもいいはずです.
/*----- 20190110追記ここまで ------*/

ここからは更新の仕方についてです.
アカウントを作るページ<https://odamid.oda.sas.com/SASODARegistration/>に
自分が作ったアカウントのFirst name,Last name,email addressを入力してCountryを選んでsubmitします.
(更新なのにCreate an accountのページなのが違和感ありますね.そんなもんなんでしょうか)

submitすると,「You are already registered with SAS OnDemand for Academics. 」と言われるので,
下のテキストボックスにアカウントのパスワードを入れて「continue」をクリックです.
この時にlicenseにagreeする旨のチェックボックスにチェックを入れてください

次のページで「Your account is ready to use. 」と出てくるので,これでOKです.
このページで自分のUSERIDを教えてくれますので,ログイン時はそのIDと設定したパスワードを使ってください.

これで一年間はまた使えるはずです.
一年後にまたライセンスの更新を忘れずにしましょう

2017年10月2日月曜日

sgplotを実行した時に,自動でグラフのイメージが出力される話

改めて見るとよくわからないタイトルですね.適当よくない

sgplotでグラフを書くと,グラフのイメージが勝手にpng形式で出てきて困ってました.
ods rtfでrtf形式を指定しているので,改めてpngは要らないのです.
そういう時は「ods listing close ;」でpngの出力止めれますよ,と言う簡単な話です.

それか出力先を自分のsasのworkにしてしまえば,
sasを落とせば勝手に消えるし出力の確認もできます.
workをこんな使い方していいのかは知りませんが.

*----- pngの出力止める(outputへの出力を止める) ;
ods listing close ;

*----- rtf出力start ;
ods rtf file = "hogehoge\test.rtf" ;

proc sgplot data = sashelp.class ;
     vbox HEIGHT / category = SEX ;
run ;

ods rtf close ;
ods listing ;


/*---------- 出力をworkにする ----------*/
%let _wk = %sysfunc(getoption(work));
%put &=_wk ;

*----- outputの出力先を指定 ;
ods listing gpath = "&_wk."

2017年9月27日水曜日

wilcoxon順位和検定の話_npar1wayプロシジャ

対応の無い2群間の比較をする際,wilcoxon順位和検定を実行するときはあると思います.
この検定をSASで実行するには,npar1wayプロシジャのwilcoxonオプションを用います.
この検定は「2群間の比較」であることに注意してください.

univariateプロシジャでも2群の比較をすることはできますが,
univariateプロシジャではwilcoxonの「符号」順位和検定を行うことが出来ます.
この検定は今回のwilcoxon順位和検定と違い,対応のある2群間比較になるので割愛します.

/*---------- testdata ----------*/
data hoge ;
    cat = "A"; var1 = 1 ; output ;
    cat = "A"; var1 = 1 ; output ;
    cat = "A"; var1 = 1 ; output ;
    cat = "A"; var1 = 2 ; output ;
    cat = "A"; var1 = 2 ; output ;
    cat = "A"; var1 = 3 ; output ;
    cat = "A"; var1 = 3 ; output ;
    cat = "A"; var1 = 3 ; output ;
    cat = "A"; var1 = 3 ; output ;
    cat = "A"; var1 = 3 ; output ;
    cat = "A"; var1 = 4 ; output ;
    cat = "A"; var1 = 4 ; output ;
    cat = "A"; var1 = 4 ; output ;
    cat = "A"; var1 = 5 ; output ;
    cat = "A"; var1 = 5 ; output ;

    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 1 ; output ;
    cat = "B"; var1 = 2 ; output ;
    cat = "B"; var1 = 2 ; output ;
    cat = "B"; var1 = 3 ; output ;
    cat = "B"; var1 = 4 ; output ;
    cat = "B"; var1 = 5 ; output ;
    cat = "B"; var1 = 6 ; output ;
    cat = "B"; var1 = 6 ; output ;
run ;

proc npar1way data=HOGE wilcoxon ;
      class CAT ;
      var VAR1 ;
      output out = NPAR ;
run;

正規分布で近似した時の片側P-値は「PR_WIL」
同じ時の両側P-値は「P2_WIL」の変数に格納されています.

結果のデータセットの全体像








おまけですが,npar1wayプロシジャを動かした時の結果の名前の一覧を以下に貼ります.
ods trace on した時に出てくるやつです.
上のプログラムでoutput outで指定すると全ての結果がデータセット化されますが,
結果の名前を指定してods outputすると,データセット化する結果を選ぶことが出来ます.














2017年8月25日金曜日

平均の信頼区間を求める話_proc means

なんかの測定値の平均の95%信頼区間を求めたいときは往々にしてあると思います.

あちこちに載っていますが,そんな時はproc meansで出せますよ,という話です.
proc univariateでも出せますが,結果をデータセット化するのはproc meansのほうが簡単だと思います.

meansでlclm(信頼区間の下限),uclm(信頼区間の上限)を指定するだけです.簡単ですね.

/*----- test data -----*/
data aa ;
    a = 1 ; b = 1 ; output ;
    a = 2 ; b = 1 ; output ;
    a = 3 ; b = 1 ; output ;
    a = 4 ; b = 1 ; output ;
    a = 5 ; b = 1 ; output ;
    a = 6 ; b = 1 ; output ;
    a = 9 ; b = 2 ; output ;
    a = 8 ; b = 2 ; output ;
    a = 7 ; b = 2 ; output ;
    a = 5 ; b = 2 ; output ;
    a = 6 ; b = 2 ; output ;
run ;

proc means data = AA noprint nway ;
    var A ;
    class B ;
    output out = HOGE n = lclm = uclm = / autoname ;
run ;

2017年7月12日水曜日

マクロ変数を作成するときに引っかかった話

マクロ変数の値を呼び出すときに、思ってたのと違う値が出てきた時があったのでそれを紹介する話です。

マクロ変数をローカルマクロとして定義した後、同じマクロ変数名でグローバルマクロ変数としてもう一度定義して、そのマクロ変数を呼び出そうとしました。

私のイメージではグローバルマクロ変数として定義したほうの値が取れてくると思ったのですが、先に定義したはずのローカルマクロ変数の値が取れてくる時がありました。
とりあえず以下にプログラムを書いときます。
しかし不思議ですねえ

data DT_TEST ;
    _AA=1 ; output ;
    _AA=2 ; output ;
    _AA=3 ; output ;
run ;
%macro MCR_TEST ;

    *----------  ローカルマクロを指定;
    %let _aa2=123 ;
    data _NULL ;
        set DT_TEST ;
       
        *----------  グローバルマクロを指定;
        call symputx("_aa2",_N_,"g") ;
    run ;
    *----------  マクロ変数を呼び出し;
    %put &_aa2 ;

%mend ;

*----------  1回目:ローカルマクロとしての値(123)が返る;
%MCR_TEST ;


*----------  2回目以降:グローバルマクロとしての値(3)を返す;
%MCR_TEST ;

2017年6月19日月曜日

whereステートメントでデータセットを抽出するときの話

データセットをwhereステートメントを使って抽出するとき、
コピペミスをして一つのデータステップにwhereステートメントを2回書いてしまいました。
実行したらどうなるのだろうと思って実行すると、

data hoge;
    a = 1; output;
    a = 10; output;
    a = 100; output;
run;

/*これ↓*/

data hogehoge;
    set hoge;
    where a = 1;
    where a = 10;
run;












と、1つ目のwhereが二つ目の式に書き換えられるんですね
結果二つ目のwhereステートメントのみで絞ったのと同じ結果になる、と。

じゃあと思ってsetのオプションにwhere書いたらどうなるのだろうと思い

data hogehoge;
    set hoge(where = (a = 1));
    where a = 10;
run;
とすると、




を実行すると、これはwarningになるのですね

今まで書いたことなかったので知りませんでした。
知ってて当然、なのかもしれませんが。