2

SQL Server 2008データベースに、SASにエクスポートしたいテーブルがあります。このテーブルには、通常の場合、このプロセスが単純になる多くのデータ型(integer、varchar、float)の列がありますが、面白いシナリオがあります。 :

2台のマシンがあります。1台目はSQLServer2008に接続されていますが、SASソフトウェアがインストールされていません。2台目は、SASソフトウェアがインストールされていますが、SQLに接続されていないため、PROCSQLコマンドを使用できません。 、だから私は試してみます:

  1. カンマ区切りのCSVへのエクスポート:ユーザーIDのような一般的に数値のフィールドがあり(SASはフィールドを数値として認識します)、SASが英数字の値を持つレコードを検出すると、エラーメッセージが表示されます。

    エラーの原因となる列の例があります(おそらく):

user_ID
1251231253    ok
5645645642    ok
1111232135    ok
CC19491855    fail
  • エラーメッセージは次のようなものです。

注:468行目12-21のuser_idのデータが無効です。
ルール:---- + ---- 1 ---- + ---- 2 ---- + ---- 3 ---- + ---- 4 .....(などon)
468 70988585,5、CC19491855 ,, ....(何とか、何とか、データ、データ...)

cod_001 = 70988585 tip_001 = 5 user_id = CC19491855 ....(何とか、何とか、データ、データ...)
エラー= 1 N = 467

  1. カンマ区切りと引用符付きの列を含むCSVへのエクスポート:すべて問題ありません。エラーメッセージは表示されませんが、SASではすべての変数が英数字としてエクスポートされます。

私はSASの初心者なので、エクスポートプロセスの後に変数をフォーマットする方法があれば問題ありません。

4

2 に答える 2

1

CSVをSASにインポートするために現在何を使用していますか?最善の策は、[ファイル]->[データのインポート]ウィザードを使用することです。これを行うと、ログウィンドウに次のようなSASコードが生成されます。

data WORK.xx    ;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile 'D:\sasdev\xxx\output\xxx.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
   informat datetimestamp anydtdtm40. ;
   informat phoneHome best32. ;
   informat phoneCell best32. ;
   informat phoneBusiness best32. ;
   format datetimestamp datetime. ;
   format phoneHome best12. ;
   format phoneCell best12. ;
   format phoneBusiness best12. ;
input
            datetimestamp
            phoneHome
            phoneCell
            phoneBusiness
;
if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
run;

インポートウィザードで必要な結果が得られなかった場合は、生成したコードをコピーして、必要に応じて変更できます。上記の例では、すべての電話番号が数値としてインポートされました。以下では、コードを少しクリーンアップし、phoneBusiness変数を長さ10の文字変数に変更しました。

data WORK.xx    ;
  infile 'D:\sasdev\xxx\output\xxx.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;

  informat datetimestamp anydtdtm40. ;
  informat phoneHome best32. ;
  informat phoneCell best32. ;
  informat phoneBusiness $10. ;

  format datetimestamp datetime. ;
  format phoneHome best12. ;
  format phoneCell best12. ;
  format phoneBusiness $10. ;

  input datetimestamp
        phoneHome
        phoneCell
        phoneBusiness $
        ;
run;

編集/更新:

「データ型」に関する注意事項。

SASには実際には2種類のデータしかありません。文字と数値。日付は数値データとして保存されますが、通常は人間が読める形式で表示されるようにフォーマットされています。以下のtypesコメントで言及されているのは、formats/informatsとして知られています。

フォーマットは、データの「表示」または「出力」の方法を制御します。Informatsは、入力として使用される場合(ファイルからの読み取りなど)にデータがどのように解析されるかを制御します。選択する情報は、データの保存方法を表す必要があります。選択する形式は、実際にはどのように表示するかによって異なります。

ここでドキュメントを見つけることができます:

http://support.sas.com/documentation/cdl/en/leforinforref/63324/HTML/default/viewer.htm#titlepage.htm

上記のコードの簡単な要約-best12.は、最大12文字の幅を使用する数値形式です。最大32文字のbest32.幅を使用します。は$10.、幅が10文字の文字形式($記号で識別)です。

于 2013-01-04T19:09:01.060 に答える
0

SQLServerから区切りファイルにテーブルを抽出します。カンマの代わりにタブまたはパイプ( "|")を使用することをお勧めします。値を引用符で囲まないでください。DATE列またはTIME列を標準のISO日付形式でフォーマットします。可能であれば、列名を含む行を上部に含めます。

完了したら、を使用PROC IMPORTしてファイルをSASデータセットに読み込むことができます。 は、入力ファイルを検査し、処理のための適切なステートメントをPROC IMPORT作成する単なるコードジェネレーターです。INPUT

特定のエラーが発生した場合(オプション1を試したときに言うように)、もう一度質問するか、この質問を正確なエラーメッセージで更新してください。このような問題は非常に簡単に解決できます。

于 2013-01-04T19:10:03.383 に答える