在SAS中将字符变量转换为数字

时间:2013-11-05 20:05:37

标签: loops sas

我有一个由60个变量和100个观察组成的数据集。每个问题的观察可以采用以下字符之一(a,b,c,d,e)。我想将它们转换为数字,所以我尝试使用Do循环,但由于某种原因,它没有运行。这是我的SAS代码:

DATA nXYZ;
set data XYZ;

array nQ {60} Q1-Q60;
do i = 1 to 60;

if Q[i] = 'a' then nQ[i] = 5;
else if Q[i] = 'b' then nQ[i] = 4;
else if Q[i] = 'c' then nQ[i] = 3;
else if Q[i] = 'd' then nQ[i] = 2;
else if Q[i] = 'e' then nQ[i] = 1;
end;

RUN;

我想知道我做错了什么。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在不使用其他变量名的情况下,您无法将字符变量本身更改为数字变量。你可以说Q [i] ='5'(假设你正确定义了你的数组)但是你无法让Q [i]存储5作为你可以做数学的数字。如果你确实通过添加额外的数组引用来使代码工作,那么它可以工作,但它会分配'5'而不是5。

解决方法是重命名变量并将重命名的变量转换回适当的变量名称。当你有60个时,这有点粘,但这是可能的。

基本概念:

data nXYZ;
set xyz(rename=(Q1=cQ1 Q2=cQ2));
array cQs cq1-cq2;
array nQs q1-q2;
do _t = 1 to dim(nQs);
  nQs[_t] = 6-(rank(cQs)-96); *'a' = 97 .. 'z' = 122;
end;
run;

您可以通过编程方式构建该重命名列表。

相关问题