Массив SAS не может обработать длинный список переменных - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь преобразовать логические, квадратные, кубические и лог-коэффициенты моих входных данных, чтобы получить исчерпывающий обзор наиболее эффективных преобразований в одномерной регрессии

Я попробовал следующий код в наборе данных с 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 переменными каждая с соответствующим преобразованием

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Гипотетически с этим проблем нет, если ваш код верен.Вот пример и журнал.

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
0 голосов
/ 15 февраля 2019

Вы используете I в качестве индексной переменной для обоих или двух вложенных циклов do.Это, вероятно, портит их.

Также ваш первый шаг данных - запись 1 000 000 наблюдений за 1 002 переменными с заполненным только нижним левым треугольником «массива». Вы действительно хотите, чтобы оператор OUTPUT был внутрипетля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...