SAS PROC 格式 - 为数值变量定义 'Other' 范围
SAS PROC FORMAT - Define 'Other' Range for Numeric Variable
我创建了一种格式,可以将州标签分配给预定义范围的起始-结束数字邮政编码。
i.e.
Start | End | State
2600 | 2618 | ACT
2900 | 2949 | ACT
4000 | 4899 | QLD
我想在格式文件中添加一段代码,以便在邮政编码超出我的范围时为其分配一个标签 "Error"。
在之前的帖子中,有人建议使用 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;
奇怪的是,只有低到高之间的中间范围被正确标记为错误,低到高之外的范围被错误标记。 (我希望相反的情况是正确的,但仍然没有按照我想要的方式工作)
为清楚起见,这是我的同一规则集发生的情况:
Pcode | ShouldReturn (Reason) | ActuallyReturns
2615 | ACT | ACT
2000 | Error (TooLow) | ACT
2700 | Error (Undefined range) | Error
5000 | Error (Too High) | QLD
我只希望任何未定义的东西都被称为错误,尽管它太低或太高。请帮忙!
你的逻辑不完整。您要添加三个新记录。
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;
我创建了一种格式,可以将州标签分配给预定义范围的起始-结束数字邮政编码。
i.e.
Start | End | State
2600 | 2618 | ACT
2900 | 2949 | ACT
4000 | 4899 | QLD
我想在格式文件中添加一段代码,以便在邮政编码超出我的范围时为其分配一个标签 "Error"。
在之前的帖子中,有人建议使用 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;
奇怪的是,只有低到高之间的中间范围被正确标记为错误,低到高之外的范围被错误标记。 (我希望相反的情况是正确的,但仍然没有按照我想要的方式工作)
为清楚起见,这是我的同一规则集发生的情况:
Pcode | ShouldReturn (Reason) | ActuallyReturns
2615 | ACT | ACT
2000 | Error (TooLow) | ACT
2700 | Error (Undefined range) | Error
5000 | Error (Too High) | QLD
我只希望任何未定义的东西都被称为错误,尽管它太低或太高。请帮忙!
你的逻辑不完整。您要添加三个新记录。
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;