Stata ナレッジ ベースには、パイプからの ASCII データの読み取りに関するメモが含まれています。これにより、圧縮解除されたバージョンをディスクに保存せずにファイルを読み取ることができます。そこに示されている方法で成功したことはありません。常にエラー メッセージが表示されます
mypipe.pip: not found
。非常によく圧縮されるテラバイトのデータがあるため、これは常に失望でした. それが他の人にとってもうまくいくかどうか聞いてみたいと思います.
これを調査しているうちに、はるかに優れていると思われる回避策が見つかりました。ナレッジ ベースの提案とは異なり、ASCII ファイルに加えて .dta ファイルでも機能します。これは私たちにとって非常に興味深いものです。これは、
use
コマンドの http オプションで実行されます。
私たちの最初の試みは、ファイル test.cgi を webserverscgi-bin
ディレクトリに追加することでした:
#!/bin/sh
echo Content-type: application/x-stata
/usr/bin/zcat /data/sample.dta.gz
そして、私たちはそれを見つけます
use http://www.nber.org/test
は Stata から動作しますが、ファイルが LAN を何度も巡回するため、多くのオーバーヘッドが発生するため、URL からファイル名を取得するなど、これを実用的にすることは追求していません。
私たちは、実際の Web サーバーやルート権限さえも必要としない代替手段を開発しています。これは、ほとんどの Linux ディストリビューションに同梱されており、Windows でも使用できる nc コマンドで実行されます。Stata プロンプトで複合コマンドを実行します。
.! (echo -ne "HTTP/1.0 200 OK\r\n\r\n"; zcat /data/sample.dta.gz;) | nc -l 8080 &
このコマンドは、ヘッダーと圧縮解除されたファイルを、ポート 8080 から読み取る最初のプロセスに送信するようにコンピューターをセットアップします。このコマンドは、正確な Stata リクエストを表示するときに、そのポートからファイルが読み取られるまで戻りません。& のため、nc が待機している間も Stata が続行されます。それで
. use http://127.0.0.1:8080
use
コマンドは一部のホスト名を受け入れないため、127.0.0.1 の代わりに「localhost」を使用できないことに注意してください。
マシンに nc がない場合は、ncat、netcat、または socat を探します。一部のバージョンでは、ポート番号の前に「-p」が必要です。nc は Windows マシンにインストールでき、同じことができるはずですが、まだ試していません。
これは、ASCII ファイル、暗号化されたファイル、分割ファイル、およびその他のタイプにも使用できます。Stat/Transfer だけが標準出力に書き込むとしたら!
セキュリティ上の問題があります.Unix許可ビットの読み取り制限を放棄します. また、圧縮されていないファイルをディスクから読み取るよりも遅くなりますが、それでも十分な速さです。
これを ado ファイルにパッケージ化しようと試みましたが、あまり成功していません。ユーザー フレンドリーな ado プログラムは、利用可能なポートを自分で見つける必要があり、これを行う良い方法はまだ見当たらず、通信する必要があるためです。 use コマンドに戻りますが、これについても途方に暮れています。リストの誰かが方法を提案するように促されるか、Statacorp が使用コマンドに解凍を組み込むだけになることを望んでいました。
ダニエル・フィーンバーグ feenberg@nber.org