创建新变量和重新编码SAS

时间:2017-11-08 17:33:18

标签: sas

我想知道是否有办法创建新变量并根据一系列值重新编码。是否可以给出范围,或者我必须指定每个值。

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 ;

1 个答案:

答案 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或其他。

您还可以设置数组并根据各种数组值检查值。

还有其他解决方案,但格式可能最适合您的特殊需求,特别是不会非常复杂。