如何通過(guò)PROC FORMAT來(lái)基于已有的dataset創(chuàng)建所需要的format唯灵,以方便后續(xù)調(diào)用該format:
Example:
假設(shè)我們已經(jīng)將所需要的format的內(nèi)容儲(chǔ)存到某一個(gè)sas dataset了,現(xiàn)在要根據(jù)dataset里的信息給AESEV這個(gè)變量基于ASEVN的值來(lái)加format, 比如拇泛,if ASEVN = 1 then ASEV = "MILD", etc.
最直接的辦法是用proc format, value/invalue踊谋,但是如果有很多變量都需要加format時(shí)hard coding的成本會(huì)很高护赊。如果我們可以通過(guò)一個(gè)小的macro把這里面的data直接做成一個(gè)個(gè)format存起來(lái)给赞,后續(xù)調(diào)用會(huì)方便很多。
首先了解一下一個(gè)format所需要的結(jié)構(gòu):
fmtname: format的名字蓬坡;
type: format的類型猿棉,包括C/N/I (C=> char, N=>num, I=> informat);
start: format的范圍的起始值;
end: format的范圍的終止值屑咳;
label:format的label萨赁;
hlo:當(dāng)遇到邊界值省略時(shí),H=>high, L=> low, O=>other.
如果我們能夠創(chuàng)建一個(gè)dataset兆龙,滿足上述變量結(jié)構(gòu)杖爽,就可以生成一個(gè)format以方便后續(xù)調(diào)用。
這里分享一個(gè)很簡(jiǎn)單的macro:
這里我們最后還可以用proc format library = xxx fmtlib 語(yǔ)句output出我們已經(jīng)生成的format來(lái)檢查一下:
當(dāng)我們需要調(diào)用這個(gè)format的時(shí)候就只需要 var = put(asev, asev.)就可以了。
上面這個(gè)例子有幾個(gè)需要注意的點(diǎn):
1 上述例子是將num加format變成char, 所以我們的start/end的值是數(shù)值型的慰安;
2 如果數(shù)值是一個(gè)范圍腋寨,比如18-64, 64-H這樣的情況化焕,就需要多一個(gè)data去賦值HLO變量(if last then hlo = "H")和type變量(type = "n");
That's all.