Как заставить макрос SAS проходить через переменные / столбцы? - PullRequest
3 голосов
/ 08 июля 2011

Я впервые пробую свои силы в макросах SAS. Мой основной вопрос: у меня есть набор данных с около 10000 переменных. Мне нужно взять каждый столбец отдельно, создать новую условную переменную, сохранить результаты, а затем перейти к следующему столбцу. Эти столбцы не упорядочены последовательно. Какой синтаксис использует SAS для идентификации столбца (аналогично тому, как " _ N _ " будет определять строку)?

Вот дополнительная информация. Данные выглядят примерно так:

ID  v1   v2   v3  ... v10000
01  3.2  1.5  7.8 ...   4.2
02  1.1  4.5  1.9 ...  10.7
..
 N  2.5  1.5  4.9 ...   7.3

Мне нужно посмотреть на значения v1, посчитать, сколько obs выше значения x и сколько ниже значения x, записать эти числа в наборе данных, а затем перейти к v2, v3, ... v10000. В конце концов, у меня будет набор данных, который будет показывать количество obs выше значения x и количество obs ниже значения x для каждой из моих 10000 переменных.

Я написал код так, как написал бы для одной переменной в стандартном коде SAS, и он работает, и теперь я намерен преобразовать этот код в макрос, но я не знаю, как создать цикл, который бы перейти от одного столбца к другому.

Буду признателен за любую помощь или рекомендации, которые вы можете дать.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 июля 2011
%LET CUTOFF = 3.1415926 ; /* set this as your 'cutoff' value */

data counters ;
  set mydata end=eof ;

  array vi{*} v1-v10000 ; /* incoming values */
  array vc{*} c1-c10000 ; /* counters */

  retain vc . ;

  do i = 1 to dim(vi) ;
    if vi{i} >= &CUTOFF then vc{i} + 1 ;
  end ;

  if eof then output ;

  keep c1-c10000 ;
run ;
0 голосов
/ 08 июля 2011

Не будет самым эффективным способом, но это даст вам 10000 отдельных наборов данных.

%macro splitdata;
%do i=1 %to 10000;
data v_&i;
   set v;
   array vArray[10000] v1-v10000;
   keep vArray[&i]; 
run;
%end splitdata;

%splitdata;

Оттуда вы можете использовать один и тот же тип цикла макросъемки для каждого набора данных v_1, v_2,....

...