data x1;*z="," ;*byte(8);
length CatNo 3 TestName $ 100 FrameNo $ 8;
infile CARDS DSD ;;*dlm=z;
input CatNo TestName FrameNo ;
cards;
1,2群間の検定 ・対応のないt検定 ,101
1,^ ^ ^ ^ ^ ^ ^ ・複数群の対応のないt検定 ,101A
1,^ ^ ^ ^ ^ ^ ^ ・対応のあるt検定 ,102
1,^ ^ ^ ^ ^ ^ ^ ・Wilcoxonの順位和検定 ,111
1,^ ^ ^ ^ ^ ^ ^ ・複数群のWilcoxonの順位和検定 ,111A
;
proc print data=x1;run;
上記のようなプログラムを作成しました。
^^^^^^^の記号のところは空白にしたいと思っています。
左詰めにならずに,空白にする方法はあるのでしょうか。
input 変数名:$char<長さ>.;
という感じで$charを使うと前方空白も読み込まれるはずです。
今回の例では、
input CatNo TestName:$char100. FrameNo ;
として実行すると、前方の空白も含んだ状態で読み込まれていないでしょうか。
(proc printではなく、直接データセットX1を開いて確認してみてください。というのも、変数に前方空白が含まれていても、proc printでは前方空白を削除して出力してしまうという罠があります)
もしこれで空白が保持されていないようでしたら、SASの環境によるものかもしれません。
Windows版SASで試したところ空白は保持されましたが、SAS Studioで試したところ空白は削除されてしまいました。
informatに$charを指定すると前方空白も保持されるかと思います。
input CatNo TestName:$char100. FrameNo ;
informatに入れるとはどういうことでしょうか?
もう少し詳しく教えていただけるとありがたいです。
data x1;*z="," ;*byte(8);
length CatNo 3 TestName $ 100 FrameNo $ 8;
infile CARDS DSD ;;*dlm=z;
input CatNo TestName:$char100. FrameNo ;
cards;
1,2群間の検定 ・対応のないt検定 ,101
1, ・複数群の対応のないt検定 ,101A
1, ・対応のあるt検定 ,102
1, ・Wilcoxonの順位和検定 ,111
1, ・複数群のWilcoxonの順位和検定 ,111A
;
proc print data=x1;run;
このようなプログラムで,2群間の検定は一番上だけ表示したくて,それから下の複数群からは表示する列をそろえたいのですが,
input 変数名:$char<長さ>.;
という感じで$charを使うと前方空白も読み込まれるはずです。
今回の例では、
input CatNo TestName:$char100. FrameNo ;
として実行すると、前方の空白も含んだ状態で読み込まれていないでしょうか。
(proc printではなく、直接データセットX1を開いて確認してみてください。というのも、変数に前方空白が含まれていても、proc printでは前方空白を削除して出力してしまうという罠があります)
もしこれで空白が保持されていないようでしたら、SASの環境によるものかもしれません。
Windows版SASで試したところ空白は保持されましたが、SAS Studioで試したところ空白は削除されてしまいました。
解決しました。
ありがとうございました。
改行の設定をDSDオプションで設定していたので空白が読み込まれないようになっていたみたいです。
dlmオプションでカンマを改行変更に設定して,教えていただいた$char.を設定すると
しっかり空白を指定することができました。
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!