Нумери c Макрос в SAS - PullRequest
       29

Нумери c Макрос в SAS

0 голосов
/ 28 марта 2020

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

Как создать макрос, который хранит самый последний день и позволяет мне цитировать его позже?

Это то, что у меня есть до сих пор (я вырезал код, который не имеет значения)


DATA scotland;
input day deathsscotland casesscotland;
cards;
1 1 85 
2 1 121 
3 1 153 
4 1 171 
5 2 195 
6 3 227  
7 6 266 
8 6 322
9 7 373 
10 10 416
11 14 499
12 16 584 
13 22 719
14 25 894
;
run;

proc sort data=scotland out=scotlandsort;
by day;
run;


Data _null_;
keep day;
set scotlandsort end=eof;
if eof then output;
run;

%let daycountscot = day

Data ratio;
set cdratio;
SCOTLANDAVERAGE = (SCOTLANDRATIO/&daycountscot)*1000;
run;

Ответы [ 3 ]

1 голос
/ 28 марта 2020

data _null_ ничего не делает. Вы можете исключить шаги sort и data, выбрав максимальное значение дня непосредственно в макропеременной.

proc sql noprint;
  select max(day) into :daycountscot trimmed
  from scotland
  ;
quit;
1 голос
/ 29 марта 2020

Для этого не нужно использовать макрос-код, лучше все равно хранить значения в переменных. Чтобы преобразовать значение в текст, чтобы сохранить его как макропеременную, SAS нужно будет округлить число.

Вы можете создать набор данных с максимальным значением DAY, а затем объединить его с набором данных, где вы хотите сделать деление.

data last_day;
  set scotlandsort end=eof;
  if eof then output;
  keep day;
  rename day=last_day;
run;

data ratio;
  set cdratio;
  if _n_=1 then set last_day;
  SCOTLANDAVERAGE = (SCOTLANDRATIO/last_day)*1000;
run;

Возможно, проще в SQL код:

proc sql;
create table ratio as 
  select a.*, (SCOTLANDRATIO/last_day)*1000 as SCOTLANDAVERAGE 
  from cdratio a
     , (select max(day) as last_day from scotland)
;
quit;
1 голос
/ 28 марта 2020

Используя свой собственный код, вы можете создать макропеременную следующим образом

Data _null_;
keep day;
set scotlandsort end=eof;
if eof then call symputx('daycountscot', day);
run;

%put &daycountscot.;
...