【SAS】ランダムな文字列を生成する
ランダムな変数を返す関数はRAND()ですが、ランダムな文字列を返す関数が見つからなかったので作ってみました。
うまいやり方があると思いますが、これで十分でした。まず、自作関数を定義します。
proc fcmp outlib=XXXX.fucntions.test; function getRandomStr(strlen) $; length str $200; abc = 'abcdefghijklmnopqrstuvwxyz'; do i=1 to strlen; index = MOD(INT(RAND('UNIFORM')*10000), 26) + 1; str = trim(left(str)) || trim(left(substr(abc, index, 1))); put(str); end; return(str); endsub; run;
使うときは、オプションで作成した関数を使用できるようにします。
options cmplib = XXXX.functions; data work.test; x = getRandomStr(10); run;
ちなみに、
str = trim(left(str)) || trim(left(substr(abc, index, 1)));
の部分を
str = cats(str, substr(abc, index, 1));
と書いても動きます。ご指摘ありがとうございました。
str= catx(str, substr(abc, index, 1))
と書いていたら空文字になって返ってきて、どはまりしてしまいました。
たぶん、catxの仕様なんでしょうが、よく分かりません。