如何通过PROC FORMAT来基于已有的dataset创建所需要的format,以方便后续调用该format:
Example:
假设我们已经将所需要的format的内容储存到某一个sas dataset了,现在要根据dataset里的信息给AESEV这个变量基于ASEVN的值来加format, 比如,if ASEVN = 1 then ASEV = "MILD", etc.
最直接的办法是用proc format, value/invalue,但是如果有很多变量都需要加format时hard coding的成本会很高。如果我们可以通过一个小的macro把这里面的data直接做成一个个format存起来,后续调用会方便很多。
首先了解一下一个format所需要的结构:
fmtname: format的名字;
type: format的类型,包括C/N/I (C=> char, N=>num, I=> informat);
start: format的范围的起始值;
end: format的范围的终止值;
label:format的label;
hlo:当遇到边界值省略时,H=>high, L=> low, O=>other.
如果我们能够创建一个dataset,满足上述变量结构,就可以生成一个format以方便后续调用。
这里分享一个很简单的macro:
这里我们最后还可以用proc format library = xxx fmtlib 语句output出我们已经生成的format来检查一下:
当我们需要调用这个format的时候就只需要 var = put(asev, asev.)就可以了。
上面这个例子有几个需要注意的点:
1 上述例子是将num加format变成char, 所以我们的start/end的值是数值型的;
2 如果数值是一个范围,比如18-64, 64-H这样的情况,就需要多一个data去赋值HLO变量(if last then hlo = "H")和type变量(type = "n");
That's all.