SAS PROC FORMAT - 定义'其他'数值变量的范围

时间:2015-12-22 23:42:31

标签: format sas proc proc-format

我创建了一种格式,将状态标签分配给预定义的开端数字邮政编码范围。

i.e. 
Start | End | State
2600 | 2618 | ACT
2900 | 2949 | ACT
4000 | 4899 | QLD

我想在格式文件中添加一段代码,为其分配标签"错误"当邮政编码超出我的范围时。

在之前的一个帖子中,有人建议使用HLO解决方案,但我尝试实现它并取得了成功。

rsubmit;
    data Fmt_State;
        set State end=eof;
        retain type 'n';
        fmtname = 'category';
        start = pcode_fr;
        end = pcode_to;
        label = State;

        * For the first observation, assign the ‘LOW’ keyword; 
        if _n_ eq 1 then HLO='L';
            if eof then do;
                *** For the last observation, assign the ‘HIGH’ keyword and output;
                HLO='H';
                output;

                *Define an 'Other' range that is outside the bounds of LOW and HIGH; 

                HLO='O';
                label = "Error";
                output;
            end;
        else output;
    run;
endrsubmit;

奇怪的是,只有Middling范围在正确标记为Error的Low-High之间以及标记错误的Low-High范围之外。 (我希望相反的情况是正确的,但仍然没有按照我想要的方式工作)

为清楚起见,这是我在同一规则集中发生的事情:

Pcode | ShouldReturn (Reason) | ActuallyReturns
2615 | ACT | ACT
2000 | Error (TooLow) | ACT
2700 | Error (Undefined range) | Error
5000 | Error (Too High) | QLD

我只是希望将任何未定义的内容称为Error,尽管它太低或太高。请帮忙!

1 个答案:

答案 0 :(得分:0)

你的逻辑不完整。您想添加三条新记录。

START END  HLO LABEL
   .  2600 L   Error (Too Low)
4899     . H   Error (Too High)
   -     - O   Error (Undefined range)

所以你想要这样的逻辑:

if _n_=1 then do;
 start=.;
 end=from;
 hlo='L';
 label='Error (Too Low)';
 output;
end;
start=from;
end=to;
label=state;
hlo=' ';
output;
if eof then do;
 end=.;
 start = to;
 hlo='H';
 label='Error (Too High)';
 output;
 hlo='O';
 label='Error (Undefined Range)';
 output;
end;