2022年8月4日木曜日

データステップでズンドコキヨシ

 このクソ忙しいときに何をやっているんだろうか.いやでも煽られたならなぁ!しょうがねえよなぁ!?Twitterで「どうぞ」なんて言われた日にはやってみざるを得ない.しょうがないんよね.元のお題はこちら.ズンドコキヨシを自作関数で表現したとの話.2016年と昔の話ではあるが…一度見かけてまあだれかsasでもやるやろとスルーしていたのは内緒だ.

元のお題は「関数を作成」ですが今回は普通のデータステップでの記載としました.マクロ化や関数化はあきらめました.FCMPよく分からんし.以下にプログラムと実行結果を示しますが,このプログラムにオサレポイントは特にないです.5個発生させた0か1の2値をとる乱数にそれぞれ0なら「ズン」1なら「ドコ」を割り当て,5変数を結合した文字列が既定の並びになったらループを終了させているだけです.arrayで生成する変数は指定がなければ数値変数になることにお気を付けください.数値変数にはズンとドコの文字列の割り当てができないので終了条件が達成されずに無限ループになります(1敗

data _null_ ;
  /*初期値を与えてもいい*/
  /*call streaminit(123) ;*/

 do until (V_RET="キヨシ!!") ;

    /*任意の範囲の乱数を発生させるにはint((上限-下限+1)*乱数+下限)*/
    /*今回は0か1の2値が欲しいので上限=1,下限=0*/
    length HOGE1 - HOGE5 $4 ;
    array ch HOGE1 - HOGE5 ;
      do i = 1 to dim(ch) ;
        ch(i) = ifc( int( 2*rand("uniform") ) = 0 , "ズン" , "ドコ") ;
      end ;

    if cats(HOGE1 , HOGE2 , HOGE3 , HOGE4 , HOGE5)="ズンズンズンズンドコ" then V_RET="キヨシ!!" ;

    /*logに出力*/
    putlog HOGE1 HOGE2 HOGE3 HOGE4 HOGE5 V_RET ;

 end ;
run ;

/*実行結果 特に上の初期値を使ってないのでこの結果は再現できない*/
/*sas studioじゃ日本語が化けるのでローマ字でやってください*/

ズン ズン ドコ ドコ ドコ ドコ ズン ズン ズン ズン ドコ ズン ズン ドコ ドコ ズン ズン ドコ ズン ズン ドコ ドコ ズン ドコ ズン ズン ズン ドコ ズン ズン ズン ズン ドコ ズン ズン ズン ズン ズン ズン ズン ドコ ズン ズン ズン ズン ドコ ドコ ズン ズン ズン ドコ ドコ ドコ ズン ズン ズン ズン ドコ ドコ ズン ドコ ズン ドコ ドコ ドコ ドコ ドコ ズン ドコ ズン
ズン ズン ズン ズン ドコ キヨシ!! NOTE: DATAステートメント処理(合計処理時間):
処理時間 0.00 秒
CPU時間 0.00 秒


0 件のコメント:

コメントを投稿