The Nameless City

何故か製薬やSAS関連のブログ、の予定。

SASでEXCELを取り込む場合、DDEでファイルを取り込むと、セル内改行文字でぶった切られる件

SAS9.4で確認。


どうにか回避出来ないものかと思って色々考えたんですが、infileステートメントでどうにもtermstrとか指定出来ないですし、別レコード判定がされてしまっているようで。
仕方ないので、改行文字の入っていないセルだけを取り込む形で回避しましたが、どうにも不格好だなあ。


EXCELファイル取り込み、幾つか方法があります。

SAS/ACCESS Interface to PC Files経由
PROC IMPORTでDBMS=EXCELで取り込む方法。SAS/ACCESS Interface to PC Filesのライセンスが必要です。また、SASのbit数とOfficeのbit数が合わない場合には、PC Files Serverを立てる必要があり、かつ、EXCELCSエンジンとか使う必要が出て来ますし、コントロール出来るレベルが変わります。
DDEで取り込む
DDEは古いデータ交換方式で、どちらかというと、動いているアプリケーション間でのデータのやり取りに使われるのですが、廃止されてはいませんが、あんまりセキュアではないです。DDEを使ったExploitはあります。ただ、今でも、Excel文書のリンク機能なんかはDDEで行われたりしているので、完全廃止とかになる可能性は薄いかと思います。


SASのDDE特有かもしれませんが、XWAIT/XSYNCとかをNOにしておかないと、バッチ形式であってもプロセスが停止したりしますね。
このあたりも問題で、Windowsのセッション内でSYNCでない状態で別プロセスでExcelを起動しそこと非同期で実行するのに、不確実なsleep関数を仕込む必要があるとか、ちょっと良くないやり方にはなってます。


Excelのセル内改行の問題は、昔からいろんなアプリで「対応していなかった」のですが、Excelのデータを例えばCSVやTSV(という言い方はあんまり一般的ではないですが、タブ区切りのテキストファイル)に保存して読み込む際でも再現出来ないというオチがあり、ある意味仕方ないのですけど、ですけど。。。。


暇になったらマクロでも作ってみようかと思いますが、多分SAS/ACCESS Interface to PC Filesとかでは回避出来るんじゃないかというのと、そもそもそれはSASで頑張りすぎじゃないか(Excel側でやるのがみんな幸せになれると思います)というので、優先度は低め。