「半角スペースを取り除いてくれる関数達」の全角バージョン。
| 関数 | 仕様 |
KLEFT
|
|
KTRIM
|
|
KCOMPRESS
|
|
KSTRIP
|
|
注意点
以前のリファレンスには記述されていなかったのですが、一部環境において、
KLEFTでは先頭の、KTRIMでは末尾の「U+000A (改行)」「U+000D (キャリッジリターン)」等の「Unicodeスペース」っていうのも取り除くようです。
| 関数 | 仕様 |
KLEFT
|
|
KTRIM
|
|
KCOMPRESS
|
|
KSTRIP
|
|
PROC DS2;
PACKAGE パッケージ名 / OVERWRITE=YES; METHOD メソッド1; ~メソッド処理~ END; METHOD メソッド2; ~メソッド処理~ END; ・・・ ENDPACKAGE; RUN; QUIT; |
DCL PACKAGE パッケージ名 インスタンス参照名(); |
インスタンス参照名.メソッド(); |
*** パッケージの作成 ;
proc ds2; package MYPACK / overwrite=yes; method TEST (double VAR1) returns double; return VAR1+10; end; endpackage; run; quit; ログ package mypack がデータセット work.mypack に作成されました。 |
*** パッケージを使う ;
proc ds2; data _NULL_; dcl package MYPACK mp(); method init(); dcl double OUTVAR; OUTVAR = mp.TEST(100); put '******' OUTVAR '******'; end; enddata; run; quit; ログ ****** 110 ****** |
PROC TEMPLATE ;
DEFINE STATGRAPH テンプレート名; BEGINGRAPH ; LAYOUTステートメント ; PLOTステートメント; ENDLAYOUT; ENDGRAPH; END; RUN; |
* 適当なデータ作成 ;
data DT1; label NO="No." HEIGHT="身長(父親)" HEIGHT2="身長(子供)"; input NO HEIGHT HEIGHT2; cards; 001 165.5 154.5 002 175.8 160.5 003 159.8 150.9 004 180.5 158.2 005 156.8 145.9 ; * 散布図と回帰直線を重ねたグラフテンプレートを作成 ; proc template ; define statgraph MYGRAPH; begingraph ; entrytitle "親子の身長"; layout overlay ; scatterplot x=HEIGHT y=HEIGHT2; * 散布図 ; regressionplot x=HEIGHT y=HEIGHT2; * 回帰直線 ; endlayout; endgraph; end; run; * グラフ作成実行 ; proc sgrender data=DT1 template=MYGRAPH; run; |
proc sort data=DT1; by A; run; proc summary data=DT1 ; by A; output out=OUT1 (drop=_TYPE_ _FREQ_) idgroup( out[3] (B C)= );
run;
|
proc sql noprint; select max(_COUNT) into:_MAX trimmed from (select count(*) as _COUNT from DT1 group by A); quit; proc sort data=DT1; by A; run; by A; output out=OUT2 (drop=_TYPE_ _FREQ_) idgroup( out[&_MAX] (B C)= );
run;
|
%let n = 37;
%let init = 1234; |
data DT1;
*** 全マス目分の配列を定義 ; array AR(&n, &n) ; *** 最初から壁にする部分を2に設定 ; do y=1 to &n; do x=1 to &n; if x in (1,&n) or y in (1,&n) or mod(x*y,2)=1 then AR(x,y)=2; else AR(x,y)=1; end; end; *** 乱数を生成して壁の位置を決める ; *** 壁の位置 1:上、2:下、3:右、4:左 ; call streaminit(&init); do y=3 to &n-2 by 2; do x=3 to &n-2 by 2; *** 1段目は上下左右の壁の乱数を生成 ; if y=3 then do; * 左のマスが壁だったら上下右のみの壁の乱数を生成 ; if AR(x-1,y)=2 then RAND = ceil(rand('uniform')*3); else RAND = ceil(rand('uniform')*4); end; *** 2段目以降は下左右の壁の乱数を生成 ; if y^=3 then do; * 左のマスが壁だったら下右のみの壁の乱数を生成 ; if AR(x-1,y)=2 then RAND = ceil(rand('uniform')*2)+1; else RAND = ceil(rand('uniform')*3)+1; end; if RAND=1 then AR(x,y-1)=2; * 上 ; if RAND=2 then AR(x,y+1)=2; * 下 ; if RAND=3 then AR(x+1,y)=2; * 右 ; if RAND=4 then AR(x-1,y)=2; * 左 ; end; end; run; |
data _NULL_; length VAR1 $5.; set DT1; array AR(&n, &n); dcl odsout ob(); ob.table_start(); do y=1 to &n; ob.row_start(); do x=1 to &n; *** 壁と床を描画 ; VAR1=""; if (x=2 and y=2) or (x=&n-1 and y=&n-1) then VAR1="☆"; ob.format_cell(data:VAR1, style_attr: "background=" || choosec(AR(x,y),"white","black") || " height=0.4cm width=0.4cm"); end; ob.row_end(); end; ob.table_end(); run; |