Arrays SAS阵列无法处理长的变量列表
我试图对我的输入数据进行对数、平方、立方和对数赔率转换,以提供单变量回归中最佳转换的详尽概述 我在一个包含1000个变量的数据集上尝试了以下代码-它返回一个错误/内存不足或根本无法执行。使用数组以这种方式集体转换变量是否有任何限制Arrays SAS阵列无法处理长的变量列表,arrays,sas,Arrays,Sas,我试图对我的输入数据进行对数、平方、立方和对数赔率转换,以提供单变量回归中最佳转换的详尽概述 我在一个包含1000个变量的数据集上尝试了以下代码-它返回一个错误/内存不足或根本无法执行。使用数组以这种方式集体转换变量是否有任何限制 /*Create a table for reference*/ DATA input_data; ARRAY var_[*] var_1-var_1000; DO i = 1 to 1000; DO i = 1 to 1000;
/*Create a table for reference*/
DATA input_data;
ARRAY var_[*] var_1-var_1000;
DO i = 1 to 1000;
DO i = 1 to 1000;
var_(i)= i*j;
output;
END;
END;
RUN;
/*Log, square, cubic, logit transform all variables*/
DATA input_transform;
SET input_data;
ARRAY var[*] var_1-var_1000;
ARRAY log[*] log_1-log_1000;
ARRAY logit[*] logit_1-logit_1000;
ARRAY sq[*] sq_1-sq_1000;
ARRAY cubic[*] cubic_1-cubic_1000;
DO i = 1 to 1000;
log(i) = log(var(i));
logit(i) = log((var(i))/(1-var(i)));
sq(i) = var(i)**2;
cubic(i) = var(i)**3;
END;
RUN;
一个包含5000个变量的新数据集,每个变量具有相应的转换您正在使用
I
作为两个或两个嵌套do循环的索引变量。这可能把他们搞砸了
此外,您的第一个数据步骤是写入1002个变量的1000000个观测值,只填写“数组”左下角的三角形。你真的希望
输出语句在循环中吗?假设只要你的代码是正确的,就没有问题。下面是一个示例和日志
option notes;
%let size=1000;
/*Create a table for reference*/
DATA input_data;
ARRAY var_[*] var_1-var_&size.;
DO i = 1 to &size.;
DO j = 1 to &size.;
var_(j)= i*j;
END;
output;
END;
RUN;
/*Log, square, cubic, logit transform all variables*/
DATA input_transform;
SET input_data;
ARRAY _var[*] var_1-var_&size.;
ARRAY _log[*] log_1-log_&size.;
ARRAY _logit[*] logit_1-logit_&size.;
ARRAY _sq[*] sq_1-sq_&size.;
ARRAY _cubic[*] cubic_1-cubic_&size.;
DO i = 1 to &size.;
_log(i) = log(_var(i));
_logit(i) = sqrt(_var(i));
_sq(i) = _var(i)**2;
_cubic(i) = _var(i)**3;
END;
RUN;
和日志:
1576 option notes;
1577 %let size=1000;
1578
1579 /*Create a table for reference*/
1580 DATA input_data;
1581 ARRAY var_[*] var_1-var_&size.;
1582
1583 DO i = 1 to &size.;
1584 DO j = 1 to &size.;
1585 var_(j)= i*j;
1586 END;
1587 output;
1588 END;
1589 RUN;
NOTE: The data set WORK.INPUT_DATA has 1000 observations and 1002
variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds
1590
1591 /*Log, square, cubic, logit transform all variables*/
1592 DATA input_transform;
1593 SET input_data;
1594 ARRAY _var[*] var_1-var_&size.;
1595 ARRAY _log[*] log_1-log_&size.;
1596 ARRAY _logit[*] logit_1-logit_&size.;
1597 ARRAY _sq[*] sq_1-sq_&size.;
1598 ARRAY _cubic[*] cubic_1-cubic_&size.;
1599
1600 DO i = 1 to &size.;
1601 _log(i) = log(_var(i));
1602 _logit(i) = sqrt(_var(i));
1603 _sq(i) = _var(i)**2;
1604 _cubic(i) = _var(i)**3;
1605 END;
1606 RUN;
NOTE: There were 1000 observations read from the data set
WORK.INPUT_DATA.
NOTE: The data set WORK.INPUT_TRANSFORM has 1000 observations and 5002
variables.
NOTE: DATA statement used (Total process time):
real time 0.12 seconds
cpu time 0.10 seconds
显示日志窗口中报告的错误。添加有关机器的一些详细信息:操作系统和版本、可用RAM和磁盘、SAS版本、来自proc options group=(内存)限制的日志消息;运行代码>我将在本周一早上访问SAS Again时添加您刚刚在磁盘中填充的除零、数字溢出和其他错误消息正在写入SAS日志?@78282219您的代码错误已清除,如果您需要进一步的帮助,也许可以先修复错误,然后包括日志。如果内部I
循环首先更正为J
Hi,那将是1M行,感谢您指出这一点-我现在无法访问SAS,因此我创建了一些假设代码来说明问题。这个问题的重点是为什么我的SAS在运行大型arraysHi Reeza上的转换时失败,我将在周一有权访问时再次运行此程序,我将与大家分享这个问题。