SASにおけるSCAN関数、SBSTR関数についてSAS Base Programmingで問題になりそうな点だけ抜粋して問題集を作成しました。
概ねSAS Base試験の参考書『SAS Certified Specialist Prep Guide(SAS 9.4)』に準拠しています。
(問題1):次のコードを実行したとき、aとbに格納される値はそれぞれ何か。
address = "209 RADCLIFFE ROAD, CENTER CITY, NY, 92716";
a = scan(address, 3);
b = scan(address, 3, ',');
a) a="ROAD"、b="CENTER CITY"
b) a="ROAD"、b="NY"
c) a="RADCLIFFE"、b="CENTER CITY"
d) a="ROAD,"、b="CENTER"
(問題2):次のコードを実行したとき、lastに格納される値は何か。
text = "The quick brown fox jumps";
last = scan(text, -1);
a) "The"
b) "jumps"
c) "fox"
d) ""(空文字)
(問題3):次のコードを実行したとき、gender1とgender2格納される値はそれぞれ何か。
code = "123FA";
gender1 = scan(code, 4);
gender2 = substr(code,4,1);
a) ""(空) / "F"
b) "" / "A"
c) "A" / "F"
d) "F" / "F"
(問題4):電話番号 Phone="919-555-1234" の "919" を "920" に書き換えるには次のどのコードが適切か。
a) substr(Phone,1,3) = '920';
b) Phone = substr('920',1,3);
c) Phone = '920'x;
d) substr(Phone,1,3) = '920-';
(問題5):次のコードを実行したとき、Code2に格納される値は何か。
Code = "HNL:96701-006";
Code2 = substr(Code,1,length(Code)-4);
a) "HNL:96701"
b) "HNL:"
c) "96701-006"
d) ""(空)
(解答1) B:デリミタをカンマに指定すると、先頭から3番目の要素は "NY"。よってbに格納される値は"NY"。
以下実行してみたい方向けコード↓↓
data _null_;
address = "209 RADCLIFFE ROAD, CENTER CITY, NY, 92716";
a = scan(address, 3);
b = scan(address, 3, ',');
put a= b=;
run;
(解答2) B:scan(text, -1)は後ろから1番目の文字列を抽出する。
以下実行してみたい方向けコード↓↓
data _null_;
text = "The quick brown fox jumps";
last = scan(text, -1);
put last=;
run;
(解答3) A:scan(code, 4)はcodeにおいて先頭から4つ目の単語を探すが、codeにはそれが存在しないため空文字を返す。
sbstrは文字の位置を検索する。4文字目から1文字を抽出するためg2は"F"になる。
以下実行してみたい方向けコード↓↓
data _null_;
code = "123FA";
g1 = scan(code, 4);
g2 = substr(code, 4, 1);
put g1= g2=;
run;
(解答4) A。
(解答5) A:length(Code)は13になる。よってCode2のsbstrの中身は(Code, 1, 13-4)になる。Codeの1文字目から9文字を抽出しているAが正解。
以下実行してみたい方向けコード↓
data _null_;
Code = "HNL:96701-006";
Code2 = substr(Code, 1, length(Code) - 4);
put Code= Code2=;
run;