我想知道是否有办法创建新变量并根据一系列值重新编码。是否可以给出范围,或者我必须指定每个值。
data recode ;
set old ;
if value =
{(291.0-291.5) OR (295.2) OR (297.3- 297.7) OR (300.5) OR (305.8)}
then care = 'new' ;
if value =
{(500.1-501.5) OR (595.2)}
then care = 'old';
ELSE care = 'other';
run ;
答案 0 :(得分:2)
SAS有in
运算符,但这对您不起作用,因为它只适用于整数或列表。它显然不适用于范围。
最小的改变是:
data recode ;
set old ;
if ((291.0 le value le 291.5) OR (297.3 le value le 297.7) OR (value in (295.2,300.5,305.8)))
then care = 'new' ;
if 500.1 le value le 501.5 or value=595.2
then care = 'old';
ELSE care = 'other';
run ;
但这很多打字。
正如J_Lard指出的那样, PROC FORMAT
是一个好主意。
proc format;
value caref
291.0-291.5,297.3-297.7,295.2,300.5,305.8 = 'new'
500.1-501.5, 595.2 = 'old'
other='other'
;
quit;
data _null_;
input value;
care=put(value,caref.);
put value= care=;
datalines;
200
291
291.3
291.7
297.0
297.5
295.2
300.5
300.7
500.0
500.1
500.5
595.2
595.5
;;;;
run;
这些范围很适合它,你可以从数据文件中读取它们(参见CNTLIN
上的PROC FORMAT
选项)或excel或其他。
您还可以设置数组并根据各种数组值检查值。
还有其他解决方案,但格式可能最适合您的特殊需求,特别是不会非常复杂。