Запуск всех переменных через функцию в SAS

Я новичок в SAS и мне нужно sgplot 112 переменных. Имена переменных все очень разные и могут меняться со временем. Как я могу вызвать каждую переменную в операторе без перечисления всех из них?

Вот что я сделал до сих пор:

%macro graph(var);
proc sgplot data=monthly;
series x=date y=var;
title 'var';
run;
%mend;

%graph(gdp);
%graph(lbr);

Приведенный выше код может быть проблематичным, так как мне нужно перечислить 112 % строк graph(), а затем изменить имена в будущем по мере изменения имен переменных.

Спасибо за помощь заранее.

1 ответ

Решение

Обработка списков - это концепция, с которой вам нужно иметь дело. Вы также можете использовать групповую обработку BY или в случае построения графиков Paneling в некоторых случаях для решения этой проблемы.

Создайте набор данных из удобного вам источника, который содержит список переменных. Это может быть файл Excel или текстовый файл, или он может быть создан из ваших данных, если есть способ программно определить, какие переменные вам нужны.

Затем вы можете использовать любой из нескольких методов для получения этого:

proc sql;
  select cats('%graph(',var,')') 
    into: graphlist separated by ' '
    from yourdata;
quit;

&graphlist

Например.

В вашем случае вы также можете сгенерировать вертикальный набор данных с одной строкой на переменную, что может быть проще для определения, какие переменные являются правильными:

data citiwk;
  set sashelp.citiwk;
  var='COM';
  val=WSPCA;
  output;
  var='UTI';
  val=WSPUA;
  output;
  var='INDU';
  val=WSPIA;
  output;
  val=WSPGLT;
  var='GOV';
  output;
  keep val var date;
run;
proc sort data=citiwk;
  by var date;
run;

proc sgplot data=citiwk;
  by var;
  series x=date y=val;   
run;

В то время как я жестко закодировал эти четыре, вы можете легко создать массив и использовать VNAME(), чтобы получить имя переменной, или VLABEL(), чтобы получить метку переменной каждого элемента массива.

Другие вопросы по тегам