根据sas中的其他列添加新列

时间:2020-07-10 16:33:35

标签: sas proc-sql

我是SAS的新手,并且希望获得有关以下问题的帮助:

1:示例表如下所示

when color = 'red' then 'A'
when color = 'blue' then 'B'
when food = 'orange' then 'B'
when food = 'apple' then 'A',
  1. 返回标签的逻辑是:

    {{1}}

由于第2行,我们同时具有红色和橙色,因此我们的标签应包含“ A,B”,与第3行相同。

要求是为每个组合打印标签。我知道我们可以使用CASE WHEN语句来定义我们的标签应如何基于颜色和食物。在这里,我们只有2种颜色和2种不同的食物,但是如果我们喜欢7种颜色和10种不同的食物,那我们将有7 * 10种不同的组合。我不想使用case when语句列出所有这些组合。

是否有任何方便的方式来退还标签?感谢您提出任何建议!(最好在PROC SQL中实现,但也欢迎使用SAS)

1 个答案:

答案 0 :(得分:3)

这看起来像是格式的简单应用。因此,请定义一种将COLOR转换为代码字母的格式,以及将第二种将FOOD转换为代码字母的格式。

proc format ;
   value color 'red'='A' 'blue'='B';
   value food 'Apple'='A' 'Orange'='B' ;
run;

然后使用它们将COLOR和FOOD变量的实际值转换为标签。在数据步骤中:

data want;
   set have ;
   length label $5 ;
   label=catx(',',put(color,color.),put(food,food.));
run;

或SQL查询:

proc sql ;
create table want as 
  select *
       , catx(',',put(color,color.),put(food,food.)) as label length=5
  from have
;
run;

仅当可能值列表发生更改时,才需要在数据更改时重新创建格式。