首页 > 解决方案 > SAS 阵列无法处理一长串变量

问题描述

我正在尝试对我的输入数据进行对数、平方、立方和对数赔率转换,以提供对单变量回归中表现最佳的转换的详尽概述

我在具有 1,000 个变量的数据集上尝试了以下代码 - 它返回错误/内存不足或根本无法执行。使用数组以这种方式整体转换变量是否有任何限制?

/*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 个变量的新数据集,每个变量都有各自的转换

标签: arrayssas

解决方案


您正在使用I作为两个或两个嵌套 do 循环的索引变量。那可能是把他们搞砸了。

此外,您的第一个数据步骤是编写 1,002 个变量的 1,000,000 个观察值,仅填充“数组”的左下三角形。您真的想要OUTPUT循环内的语句吗?


推荐阅读