有時(shí)候你們沒在簡書看到我的文章各淀,有可能是被鎖定了,上一篇就是被鎖定了诡挂,莫名其妙的碎浇,不知道是不是涉及到政Z。
今天繼續(xù)講幾個(gè)關(guān)于時(shí)間處理的函數(shù)璃俗,寫SDTM或者ADaM一般用的比較少奴璃,但是在寫DVP的時(shí)候可能用的上并且有時(shí)候能達(dá)到事半功倍的效果。
一:tod函數(shù)
一般轉(zhuǎn)換時(shí)間的時(shí)候城豁,用的最多的一般是time8等.
data test;
????input tim $;
cards;
7:42
20:47
19:20:22
9:30
;
run;
data test2;
set test;
tim2=input(tim,time8.);
format tim2 time8.;
run;
data test3;
set test2;
tim3=put(tim2,tod8.);
tim4=put(tim2,time8.);
run;
但是time函數(shù)苟穆,如果時(shí)間是10以前的,并不會(huì)在個(gè)位數(shù)前補(bǔ)上0钮蛛,但是tod函數(shù)會(huì)幫你補(bǔ)上0鞭缭,但是要注意的是tod函數(shù)只能將數(shù)值型轉(zhuǎn)換成字符型,但是time函數(shù)能夠相互轉(zhuǎn)換魏颓。
二:is8601dt19./e8601dt19.?效果看圖片
data test;?
? ?a="2011-01-15T12:55:00";?
? ?b=input(a,is8601dt19.);??
? ?c=put(b,is8601dt19.);? ??
? ?d=put(b,datetime20.);?
e=put(b,e8601dt19.);?
run;?
is8601dt19.這個(gè)格式既能將字符型變量轉(zhuǎn)化為數(shù)值型變量岭辣,又能將數(shù)值型變量轉(zhuǎn)化為字符型變量。而datetime20.只能將數(shù)值型變量轉(zhuǎn)化為字符型變量甸饱,轉(zhuǎn)化后的形式也略有差異沦童,為15JAN2011:12:55:00形式,沒有中間的那個(gè)“T”叹话。
三:yymmdd10./e8601da.效果看圖片
data test;?
a="2021-01-15";
? ?b=input(a,yymmdd10.);??
? ?c=input(a,e8601da.);?
e="2021-1-15";
? ?f=input(e,yymmdd10.);??
? ?g=input(e,e8601da.);
run;?
e8601da.則和常用的yymmdd10.類似偷遗,不過不識(shí)別"2021-8-5”這種形式,而必須是"2021-08-05",就是日期要完整驼壶。所以可以看到變量g是空的氏豌。
所以為了解決第三個(gè)的問題,有以下函數(shù)可以用:
四:anydtdtm.函數(shù)热凹,能處理一些不規(guī)范的時(shí)間格式泵喘,比如上面的日期函數(shù)有些就不適用下面的日期泪电。這個(gè)功能挺強(qiáng)大的。(代碼放簡書)
data b;
a1="2011-01-15T12:55:00";? **可以識(shí)別;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
b1=input(a1,anydtdtm.);
a2="2011-01-16";? ? ? ? ? **可以識(shí)別;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
b2=input(a2,anydtdtm.);
a3="2021-01" ;? ? ? ? ? /*只有年月可以讀取出來,很多這種不完整的日期纪铺,轉(zhuǎn)換成數(shù)值型后可以方便比較*/
b3=input(a3,anydtdtm.);
a4="2011-01-15T12:55";? /*時(shí)間格式不完整讀取不出相速,即使有 時(shí)分*/
b4=input(a4,anydtdtm.);
a5="2021";? ? ? ? ? ? ? /*只有年份讀取不出*/
b5=input(a5,anydtdtm.);
a6="2011/01/16";? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
b6=input(a6,anydtdtm.);? **斜杠亦可以識(shí)別;
a7="2011-01-15 12:55:00";? ? **時(shí)間日期沒有 T 也可以識(shí)別;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
b7=input(a7,anydtdtm.);
run;? ? ? ?
5:anydtdte.函數(shù),自動(dòng)填補(bǔ)最早的日期鲜锚。
data test;
a="2021-08";
b=input(a,anydtdte.);
format b yymmdd10.;
run;
但是只有年份不可以突诬。
如果想填補(bǔ)最后一天呢?可以利用INTNX函數(shù)芜繁,來自一位網(wǎng)友的分享:
data test;?
format b c yymmdd10.;?
a="2021-08";?
? b=input(a,anydtdte.);? ? ? ? ? ? ? ? ??
? c=intnx('month',b,0,'e');? ? ? ? ? ? ? ? ?
run;