LoginSignup
2
3

More than 1 year has passed since last update.

SASテクニック よく使う関数 memo

Last updated at Posted at 2020-06-11

SASで自分がよく使う関数のメモ書き

input/put:数値/文字の変換やフォーマットを使った変換

新規数値変数 = input( 文字変数 , best. );
新規文字変数 = put( 数値変数 , best. -L );

など
数値なのか文字なのかはけっこう大事

A = put( 12 , z3. -L );

でA = "012"などゼロパティングなども可能
(00ABとか文字もできたっけ?)

substr:範囲抽出

substr( "zzzzaaaaqqqq" , 1 , 10 )でzzzzaaaaqq
substr( "zzzzaaaaqqqq" , 5 )でaaaaqqqq

cmiss:変数値が欠損値になっている変数をカウント

X = cmiss( A , B , C );
%* (Aだけ欠損なら1,AとBのみ欠損なら2などとなる) *;

coalesce/coalescec:引数のリストから最初の非欠損値をかえす

%* coalesceが数値版/coalescecが文字版 *;
A = coalesce( . , 1 , 2 );

↑ならA = 1

cats:変数の両端からブランクを除きながら結合

引数が1個なら両端からブランク削除するだけ

A = cats( " a " ); %* A = "a" *;
B = cats( " a " , "b " ); %* B = "ab" *;

%* ※数値変数を入れることもできる *;
C = cats( 1 , "2" ); %* C = "12" *;
D = cats( 10 ); %* D = "10" *;

choosen/choosec:後続の引数からの選択結果をかえす(1つめの引数が場所を表す)

%* choosenが数値版/choosecが文字版 *;
A = choosen( 3 , 10 , 50 , 20 , 40 , 30 ); %* A = 20 *;
B = choosec( 2 , "aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff" ); %* B = "bbb" *;

whichn/whichc:choose系の逆版(後続の引数と一致した場所を返す)

A = whichn( 1 , 2 , 4 , 5 , 1 , 2 , 3 ); %* A = 4 *;
B = whichc( "aaa" , "abc" , "aaa" , "bbb" , "grgfwer" , "wfefwewfef" ); %* B = 2 *;

コードリストの変換や変換前にするのにchooseやwhich系は便利
また、whichnは以下のような使い方もよくする

data work.DATA_ALL;
  set DATA1( in = in1 ) DATA2( in = in2 ) DATA3( in = in3 );
  DATA_FLG = whichn( 1 , in1 , in2 , in3 );
  %* of in1 - in3などでも可 *;
run ;

とすると、縦結合したとき元のデータセットを判断できる変数DATA_FLGを作れる

compress:指定した文字の削除/指定した文字のみ残す

A = compress( XXX ); %* 変数XXXのブランク削除をしたものを格納 *;
B = compress( XXX , "asdfg" ); %* 変数XXXからa,s,d,f,gを削除したものを格納 *;
C = compress( XXX , "qwert" , "K" ); %* 変数XXXからq,w,e,r,tのみ残したものを格納(Kが残すための指定) *;
%* 数値を残すならcompress( XXX , , "KD" )とすることも可能 *;

KDだとマイナスの「-」は残らない→compress( XXX , "0123456789.-" , "K" )なら小数点やマイナスも残せる

文字列の削除

A = transtrn( XXX , "文字列" , cats( "" ) ); * catsはcompressでも可 *;
B = transtrn( "aa1a2" , "aa" , cats( "" ) ); %* B = "1a2"(12とはならない) *;

※ transtrn( "aa1a2" , "aa" , cats( "" ) ) だと" 1a2"
また、catsやcompress等つけないと、ブランクが残る

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3