%n
ディレクティブをPICTURE形式で使用できるはずです。
proc format;
picture pictdhmf
low-high='%0n:%0H:%0M'(datatype=time)
;
run;
メモTIMEのデータ型を使用する必要があります。 警告:DBCSサポートを使用してSASを実行する場合(Shift-JISエンコーディングなどを使用して)、適切な結果が得られません。または0より小さい時間。 UTF-8エンコーディングの場合でも、シングルバイト文字セットを使用する場合は、負でない値に対しても機能します。
代わりに、関数を作成することができます。
proc fcmp outlib=work.func.func;
function dhmf(c) $;
length f $ 10;
f=catx(':',datepart(abs(c)),put(timepart(abs(c)),tod5.));
if c < 0 then f='-'||f ;
return (f);
endsub;
run;
options cmplib=work.func;
この関数を呼び出すフォーマットを作成します。
proc format;
value dhmf(default=10)
other=[dhmf()];
run;
したがって、両方のメソッドをテストして、TIMEフォーマットが生成する値と比較するとします。
data _null_;
input (date1 date2) (:datetime24.) ;
diff = date2 - date1 ;
if _n_=1 then put 'RAW' @11 'TIME.' @20 'Function' @ 30 'Picture';
put diff comma9. @11 diff time. @20 diff dhmf. @30 diff pictdhmf.-l ;
cards ;
01JAN2000:02:30 02JAN2000:03:45
01JAN1960:08:00 01JAN1960:17:00
01FEB2017:00:00 04FEB2017:06:23
01FEB2015:00:00 04FEB2017:06:23
04FEB2017:00:00 01FEB2017:06:23
run;
我々が得る:
RAW TIME. Function Picture
90,900 25:15:00 1:01:15 1:01:15
32,400 9:00:00 0:09:00 0:09:00
282,180 78:23:00 3:06:23 3:06:23
63440580 17622:23 734:06:23 734:06:23
-236,220 -65:37 -2:17:37 -2:06:23
出典
2017-03-29 15:12:05
Tom
日時の値の間の差は数秒で差を表します。カスタムTIME形式を求めているようです。 – Tom
はい、それはおそらく正しいと思います。私はSASドキュメントで時間と時間を分けた時刻形式を見つけることができませんでした。この形式はありますか? – Bosley