SAS データ (テーブル構造を含む) を単一のフラット ファイルに保存する
-
02-07-2019 - |
質問
SAS データテーブルをフラットファイル (バイナリファイルではなく、かつては「ASCII ファイル」と呼ばれていた) に変換する必要があります。また、元の SAS テーブルごとにフラット ファイルは 1 つだけです。難しいのは、フラット ファイルに元の SAS テーブルの構造情報も含める必要があることです。具体的には次のとおりです。
- 変数/列名
- 変数/列ラベル
- 変数/列の型
- 変数/列の長さ
- 変数/列の形式
- 変数/カラム情報
追加情報:
- 変換する必要があるのは小さなデータ (< 100 obs) のみです。
- パフォーマンスは問題ありません (合理的な制限内で)。
- フラット ファイルは、元の SAS テーブルを再作成するための基礎を形成する必要があります。ファイルを DATA または PROC ステップのテーブルとして直接使用できる必要はありません。
標準の SAS テーブル、トランスポート ファイル、XPORT ファイルなどはすべてバイナリ形式のファイルであり、SAS および CSV ファイルの標準の XML テーブル形式はテーブル構造を保持しません。したがって、明らかにこれらのオプションは役に立ちません。
私の最善の選択肢は何ですか?
解決
簡単な解決策はわかりません。
おそらく:
- PROC EXPORT を使用して、データを含む CSV ファイルを作成します。
- ODS で PROC DATASETS を使用して、名前、タイプなどを含むデータセットを生成します。
- このデータセット用に別の CSV ファイルを作成します。
これで、テーブルの ASCII 記述が得られました (2 つの CSV ファイルにまたがる)。このプロセスを逆にすると、さらに困難になります。基本的には、説明データセットを読み取り、ループ内で CALL SYMPUT を使用して、その情報を含む一連のマクロ変数を作成し、そのマクロ変数を使用して CSV ファイルの PROC IMPORT を構築する必要があります...
他のヒント
テーブルをテキストにエクスポートするコードを作成します (これは簡単です。Google で検索するか、コピーをお持ちの場合は「The Little SAS Book」を参照してください)。
次に、sashelp.vcolumn からの「メタ」情報を追加します。これは、sas が sas データセットに関する情報 (メタデータ) を保存する場所です。これは sas テーブル自体であるため、proc sql Union 操作を実行して、このテーブルで説明されている実際の列と結合できます (ただし、列に関するメタデータは列ではなく行にあるため、transpose 型の操作を行う必要があります) )。
テキスト ファイル内のメタデータをどのように表示するかが完全に具体的ではないため、私ができる限りのことです。
proc SQLのdescribe構文は、長さ、型、形式、インデックスなどを含むメタデータ部分を取得するのに便利かもしれません。
コード:
proc sql;
describe table sashelp.class;
quit;
ログ:
NOTE: SQL table SASHELP.CLASS was created like:
create table SASHELP.CLASS( bufsize=4096 )
(
Name char(8),
Sex char(1),
Age num,
Height num,
Weight num
);
SAS 9.2では、データセットからXMLファイルを作成できます。XMLには、フォーマット、ラベルなどの変数/列メタデータが含まれています。SAS 9.2 XML LIBNAME Engineのセクションを参照してください。「XML エンジンを使用してオペレーティング環境間で SAS データ セットを転送する」というタイトルのユーザー ガイド。それへのリンクはここにあります:
http://support.sas.com/documentation/cdl/en/engxml/61740/HTML/default/a002594382.htm
以下は、XML92 libname エンジンと PROC COPY を使用して XML を作成する方法を示す、マニュアルのコードのセクションです。
libname myfiles 'SAS-library';
libname trans xml92 'XML-document' xmltype=export;
proc copy in=myfiles out=trans;
select class;
run;
SAS 9.1.3 では、同じ操作を行うためにカスタム タグセットを作成する必要がある場合があります。SAS テクニカルサポート (support@sas.com) がサポートを提供できる場合があります。
ところで、なぜこれを行う必要があるのかについては述べていません。この場合、正当な理由はありません(「やる、または解雇される」と言っている人のような説得力のある理由があるかもしれませんが、 良い 理由)。
私なら、よほどの特別な理由がない限り、各ファイルのメタデータとデータを結合するという考えはやめます。データセット A のメタデータを、metadata_A というファイルにエクスポートします。これにより、ファイルがペアになります。データベース プログラムや統計プログラムでこれらのファイルを使用しようとしている人は、作業用に明確なラベルが付けられたメタデータ ファイルを持っていることになります。
SAS 内のデータのみを使用する場合は、PROC COPY を使用してトランスポート ファイルを作成するだけです。