我是SAS的新手,并且希望获得有关以下问题的帮助:
1:示例表如下所示
when color = 'red' then 'A'
when color = 'blue' then 'B'
when food = 'orange' then 'B'
when food = 'apple' then 'A',
返回标签的逻辑是:
{{1}}
由于第2行,我们同时具有红色和橙色,因此我们的标签应包含“ A,B”,与第3行相同。
要求是为每个组合打印标签。我知道我们可以使用CASE WHEN语句来定义我们的标签应如何基于颜色和食物。在这里,我们只有2种颜色和2种不同的食物,但是如果我们喜欢7种颜色和10种不同的食物,那我们将有7 * 10种不同的组合。我不想使用case when语句列出所有这些组合。
是否有任何方便的方式来退还标签?感谢您提出任何建议!(最好在PROC SQL中实现,但也欢迎使用SAS)
答案 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;
仅当可能值列表发生更改时,才需要在数据更改时重新创建格式。