2016-09-23 27 views
1

SASデータセットをエクスポートしてからSASにインポートし、検証のためにprocを比較してすべての値が同じであることを確認します。残念ながら、日付はDATETIME20です。オリジナルのSASデータセットでは、MMDDYY10にあります。日付の値をSASからExcelに戻すと、私はそれで生きることができましたが、値の比較結果は、値が一致していないことを示し、ベースで04/04/06、比較で04APR2006をリストしています。SAS Proc異なるフォーマットの比較

procは無視フォーマットを比較する方法、または変数がMMDDYY10であるかどうかを具体的にチェックする方法はありますか?その変数DATETIME20を割り当てます。

私はSASに慣れていませんが、これは私がしたいことです。コメントアウトビット:

proc compare b = myBase c = myComp listvar warning; 
* ignore date formats; 
run; 

または検証がSASで行われなければならない

proc import datafile = myExcelFile 
     out = myBase 
     dbms = xls replace; 
    guessingrows = 32767; 
    getnames = yes; 
      * if anyVariable MMDDYY10. then thatVariable DATETIME20.; 
    sheet = "mySheet"; 
run; 

- エクセルのない操作。

答えて

1

SASは、DATETIME値を秒単位で、DATE値を日単位で格納します。 実際にDATETIME変数に日付のみを格納していた場合は、DATETIME値をDATE値に変換する必要があります。

data for_compare ; 
    set myComp ; 
    datevar = datepart(datevar); 
    format datevar mmddyy10.; 
run; 

proc compare b = myBase c = for_compare listvar warning; 
run; 

あなたが本当に実際にDATETIME値を格納した場合、その理由も、Excelは、時間の一部を失っているので、それらが一致しないので、比較するのにわざわざ。

+0

実際には、Excelは時間の部分を失っていない可能性があります。時には、 'dhms(datevar、0,0,0)'がそれらを復元する分数日として取得できます。 – Joe

+0

私はその事実が慰めているか怖いのか分かりません。 – Tom

+0

ええと、私はそれが "Excelからの変換は理想的ではない"ものの1つだと思います。 :) – Joe

1

DATETIME20. vs MMDDYY10.は、フォーマットの違いだけではなく、問題ではありません。

datetimeは1/1/1960 00:00:00からの秒数で、日付は1960年1月1日からの日数であるため、基礎となる値の違いです。非常に異なるヌーマー(86400倍)。

インポート時にこれを制御する必要があります。そうした場合は、後で変換する必要があります。あなたはdatetime型としてインポートするために、Excelを伝えるためにDBSASTYPEを試すことができます。

proc import datafile = myExcelFile 
     out = myBase 
     dbms = excel replace; 
    getnames = yes; 
    sheet = "mySheet"; 
    dbdsopts="dbsastype=(yourdatevar='datetime')"; 
run; 

私はあなたがdbdsoptsを使用するDBMS=EXCELないXLSを使用する必要があると思いますが、100%ではないことを確認。 USEDATE=NOオプションを使用することもできますが、1900年1月1日から1960年1月1日に正しく変換されるかどうかはわかりません("Processing Date and Time Values in Microsoft Excel"参照)。

実際に変換する場合は、DATEPARTを使用してdatetimeをdateに変換するか、またはnewdtvar = DHMS(datevar,0,0,0)を使用して日付をdatetimeに変換します。

+0

残念ながら、dbms = excelは使用できません。これは32ビットであることに起因する可能性があり、SASは64ビットです。あなたが疑うところでは、dssastypeは機能しません。しかし、私はヒントをありがとう、そして今のところ通り過ぎています。 – DrWhat

関連する問題