BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
OKY1
Calcite | Level 5
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;         

 上記のようなプログラムを作成しました。

^^^^^^^の記号のところは空白にしたいと思っています。

左詰めにならずに,空白にする方法はあるのでしょうか。

1 ACCEPTED SOLUTION

Accepted Solutions
amatsu
Obsidian | Level 7

 

 

input 変数名:$char<長さ>.;

 

という感じで$charを使うと前方空白も読み込まれるはずです。

今回の例では、

 

input CatNo TestName:$char100. FrameNo ;

 

として実行すると、前方の空白も含んだ状態で読み込まれていないでしょうか。
(proc printではなく、直接データセットX1を開いて確認してみてください。というのも、変数に前方空白が含まれていても、proc printでは前方空白を削除して出力してしまうという罠があります)

 

もしこれで空白が保持されていないようでしたら、SASの環境によるものかもしれません。
Windows版SASで試したところ空白は保持されましたが、SAS Studioで試したところ空白は削除されてしまいました。

View solution in original post

4 REPLIES 4
amatsu
Obsidian | Level 7

 

informatに$charを指定すると前方空白も保持されるかと思います。

 

input CatNo TestName:$char100. FrameNo ;

 

OKY1
Calcite | Level 5

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群間の検定は一番上だけ表示したくて,それから下の複数群からは表示する列をそろえたいのですが,

amatsu
Obsidian | Level 7

 

 

input 変数名:$char<長さ>.;

 

という感じで$charを使うと前方空白も読み込まれるはずです。

今回の例では、

 

input CatNo TestName:$char100. FrameNo ;

 

として実行すると、前方の空白も含んだ状態で読み込まれていないでしょうか。
(proc printではなく、直接データセットX1を開いて確認してみてください。というのも、変数に前方空白が含まれていても、proc printでは前方空白を削除して出力してしまうという罠があります)

 

もしこれで空白が保持されていないようでしたら、SASの環境によるものかもしれません。
Windows版SASで試したところ空白は保持されましたが、SAS Studioで試したところ空白は削除されてしまいました。

OKY1
Calcite | Level 5

解決しました。

ありがとうございました。

改行の設定をDSDオプションで設定していたので空白が読み込まれないようになっていたみたいです。

dlmオプションでカンマを改行変更に設定して,教えていただいた$char.を設定すると

しっかり空白を指定することができました。

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Discussion stats
  • 4 replies
  • 1724 views
  • 1 like
  • 2 in conversation