Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在SAS中将字符变量转换为数字变量_Loops_Sas - Fatal编程技术网

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

Loops 在SAS中将字符变量转换为数字变量,loops,sas,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] = '

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

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

如果不使用另一个变量名,就不能将字符变量本身更改为数字变量。你可以说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;

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

您忘记了创建Q数组。您可能需要查看
proc格式。它的存在就是为了解决这类任务。