2017-11-23 6 views
0

私は、日付データを格納するカラム名value_dtを持つSasoprskライブラリのsasサーバでcust_field_value_lという名前のテーブルを持っています。weboutファイルでsasバイナリdatetimeをdd/mm/yyyyに変換する方法

この表からデータを取得すると、バイナリデータは1.827E9または1.826E9となり、Weboutファイルに出力すると*****と表示されます。など

proc sql noprint; 
create table date(date datetime); 
quit; 

proc sql noprint; 
insert into date(date) 
select value_dt 
from Sasoprsk.cust_field_value_l; 
quit; 

今私の日付テーブルが1.826E9としてデータを持っている

data _null_; 
put "<html><body>"; 
run; 

data _null_; 
    put numberOfObservations=; 
set work.date nobs=numberOfObservations; 
file _webout; 
put date; 
run; 

data _null_; 
put "</body></html>"; 
run; 

私はweboutファイルに*****

を受けています、私はそれだけで、あまりにもこれを試してみました私に間違った日付を与える

proc sql noprint; 
insert into date(date) 
select (today()-datepart((value_dt/1000.0)+315601200)) 
from Sasoprsk.cust_field_value_l; 
quit; 

このコードは、すべての日付の値に対して私に唯一の03NOV07を与えています。

dbから正しい日付の値を取得してweboutファイルに表示する方法がわかりません。

value_dtには、23NOV2017:00:00:00 formateのすべての値があります。今日と比較せずに

value_dt 
23NOV2017:00:00:00 
15NOV2017:00:00:00 
20NOV2017:00:00:00 

()

date 
1.827E9 
1.826E9 
1.827E9 

とは(今日と比較して、すべての行について*****

を私に与えて)

date 
03NOV07 
03NOV07 
03NOV07 

と日付データごとに03NOV07を印刷

答えて

1

SASには2つのデータタイプしかありません。固定長の文字列と浮動小数点数。 DATE値は'01JAN1960'dからの日数として格納され、DATETIME値は'01JAN1960:00:00'dtからの秒数として格納されます。表示している数値は、日時の値と一致しています。 TODAY()関数(関数DATE()とも呼ばれます)は、DATE値を返します。 DATETIME値が必要な場合は、代わりにDATETIME()関数を使用してください。

日付の変数をフィルタリングするために日付値( '03NOV2007'dのようなもの)をユーザーに提供したい場合は、それらを比較する前にどちらか一方を変換する必要があります。あなたは日時変数名TIMESTAMPを持っている、あなたは、あなたが既存のデータセットから値を読み込むことによって、新しいデータセットを作成している場合は、単にデータステップを使用し

where today() = datepart(timestamp) 

のようなものを使用することができ、今日発生したイベントを見つけたいと言います。データセットを事前に作成してから観測データを「挿入」する必要はありません。または、PROC SQLを使用することに悩まされる。必要なデータセットを作成するだけです。

data date ; 
    set Sasoprsk.cust_field_value_l ; 
    keep value_dt ; 
    rename value_dt=date ; 
    format value_dt datetime20. ; 
run; 

しかし、全体の目的は_WEBOUT filerefに値を印刷するだけであるならば、最初のデータのコピーを作成する必要はありません

。ソースデータから直接印刷するだけです。

data _null_; 
    put numberOfObservations=; 
    set Sasoprsk.cust_field_value_l nobs=numberOfObservations; 
    file _webout; 
    put value_dt datetime20.; 
run; 

あなただけ、あなたが代わりにDTDATE9.フォーマットを使用することができますdatetime値の日付部分を印刷したい場合。

+0

レポートのデータセットを作成する必要があるため、日付の値を表示することができません。それはフィルタを含んでいるかもしれないので、それらのフィルタを使ってデータセットを作成してから、そのテーブルを私のweboutファイルに出力することができます。 – Azeem112

+0

cust_field_value_dtの値はcust_field_nmがx_app_dte_dateのような私の望むフィールドと同じで、日付テーブルに置いていますが、私のweboutに表示すると、03NOV07はすべての日付値に表示されます。** – Azeem112

+0

値がdatetime SECONDSの数)、DATE形式を使用して表示しようとすると、有効な日付(DAYSの数)になるまでにwaaaaaaaayが大きいため、****が表示されます。 datetime値を日付値に変換するには、DATEPART()関数を使用します。しかし、それでも人間が読める形式で表示するにはフォーマットを使用する必要があります。日付型のフォーマットがなければ、それはちょうど大きな数字になります。 – Tom

関連する問題