0

我有一个包含 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;

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

4

1 回答 1

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;

您可以以编程方式构造该重命名列表。

于 2013-11-05T20:53:02.383 回答