SAS: proc reg и macro - PullRequest
       10

SAS: proc reg и macro

0 голосов
/ 30 августа 2018

У меня есть данные, которые содержат 30 переменных и 2000 наблюдений. Я хочу вычислить регрессию в цикле, после чего на каждом шаге я удаляю строку i в данных. так что в итоге мне нужно, чтобы мои выходные данные были в 2001 году, по одному для регрессии на все данные в конце 2000 года каждый раз, когда я сбрасываю строку.

Я новичок в sas, и я показываю, как это сделать с помощью макроса, но я не понял.

Любые комментарии и помощь будут оценены!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Это создаст набор данных, о котором я говорил в своем комментарии к Крису.

data del1V /view=del1v;
   length group _obs_ 8;
   set sashelp.class nobs=nobs;
   _obs_ = _n_;
   group=0;
   output;
   do group=1 to nobs;
      if group eq _n_ then;
      else output;
      end;
   run;
proc sort out=analysis;
   by group;
   run;
0 голосов
/ 30 августа 2018
DATA NEW;
  DATA OLD;
  do i = 1 to 2001;
    IF _N_ ^= i THEN group=i;
    else group=.;
    output;
  end;
proc sort data=new;
  by group;
proc reg syntax;
  by group;
run;

Это создаст набор данных, который будет намного длиннее. Вы будете вызывать proc reg только один раз, но он запустит модели 2001 года.

Изучение результатов регрессии 2001 года будет сложно просто записать как вывод. Скорее всего, вам нужно будет прочитать документацию по поддержке PROC REG и посмотреть параметры вывода для любого типа вывода, который вас интересует. SAS может создать набор данных со столбцом GROUP для дифференциации результатов.

Я отредактировал свой исходный ответ в соответствии с предложением @data null . Я согласен, что вышеупомянутое, вероятно, быстрее, хотя я не настолько уверен, что это будет в 100 раз быстрее. Я не знаю достаточно о стоимости накладных расходов по сравнению с затратами группы по заявлению и большему набору данных. Независимо от того, ответ выше простое программирование. Вот мой оригинальный ответ / альтернативный подход.

Вы можете сделать это в макропрограмме. Он будет иметь такую ​​общую структуру:

%macro regress;
  %do i=1 %to 2001;
    DATA NEW;
      DATA OLD;
      IF _N_=&I THEN DELETE;
    RUN;
    proc reg syntax;
    run;
  %end;
%mend;
%regress

Макросы - это расширенная функция программирования в SAS. Макропрограмма требуется для того, чтобы сделать цикл proc reg. % Указывают на макрофункции. & i - макропеременная (& - префикс вызываемой макропеременной). Макрос создается в блоке, который начинается и заканчивается с помощью% macro /% mend и вызывается% regress.

Изучение результатов регрессии 2001 года будет сложно просто записать как вывод. Скорее всего, вам нужно будет прочитать документацию по поддержке PROC REG и посмотреть параметры вывода для любого типа вывода, который вас интересует. Используйте & i, чтобы каждый раз создавать разные наборы данных, а затем добавлять их вместе как часть макро цикла.

...