Как я могу вызвать переменную из таблицы, которая является макропеременной? - PullRequest
0 голосов
/ 19 апреля 2019

извиняюсь, если мой заголовок смущает прочтение, но я не знаю, как еще описать это кратко.

Я пытаюсь вызвать переменную из таблицы, которая является макропеременной (таблица является макропеременной)

Мой макрос выглядит так:

%macro genre_analysis(table1=,table2=,genre=,genre1=);
proc sql;
create table &table1 as
select id, original_title, genres, revenue
from genres_revenue
where genres_revenue.genres like &genre
and revenue is not null
group by id
having revenue ne 0
;
quit;

proc sql;
create table &table2 as
select avg(revenue) as Average format=dollar16.2, median(revenue) as Median format=dollar16.2, std(revenue) as std format=dollar16.2
from &table1;
quit;

Все работает нормально, пока я не дохожу до этой части макроса:

proc sql;
title "Revenue Stats by Genre";
    insert into genre_summary
    set Genre=&genre1,
    average=&table2.average,
    median=&table2.median,
    std=&table2.std;
%mend genre_analysis;

Я пытаюсь вставить строку в таблицу, которую создаю вне макроса. Но использование «& table2.average» и двух других, начинающихся с «& table2», не вызывает переменные из таблицы, которую я создал в макросе.

Например:

%genre_analysis(table1=horror_revenue,table2=horror_revenue_stats,genre='%Horror%',genre1='Horror')

Возвращает:

NOTE: Table WORK.HORROR_REVENUE created, with 725 rows and 4 columns.

NOTE: PROCEDURE SQL used (Total process time):
      real time           0.04 seconds
      cpu time            0.03 seconds


NOTE: Table WORK.HORROR_REVENUE_STATS created, with 1 rows and 3 columns.

NOTE: PROCEDURE SQL used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


ERROR: Character expression requires a character format.
ERROR: Character expression requires a character format.
ERROR: Character expression requires a character format.
ERROR: It is invalid to assign a character expression to a numeric value using the SET clause.
ERROR: It is invalid to assign a character expression to a numeric value using the SET clause.
ERROR: It is invalid to assign a character expression to a numeric value using the SET clause.
**ERROR: The following columns were not found in the contributing tables:
       horror_revenue_statsaverage, horror_revenue_statsmedian, horror_revenue_statsstd.**

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

Я попытался использовать предложение from, но, похоже, это тоже не сработало.

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

1 Ответ

0 голосов
/ 19 апреля 2019

Вам не нужно хранить сводную статистику в промежуточной таблице для последующего использования в операторе INSERT. Вместо этого вы можете вставить выделение прямо в таблицу.

Например:

* table to receive summary computations;
proc sql;
  create table stats
  (age num
  , average num
  , median  num
  , std     num
  , N num
  );

* insert summary computations directly;    
proc sql;
  insert into stats
  select 
     age
   , mean (height) 
   , median (height)
   , std (height)
   , count (height) 
   from sashelp.class
   group by age
  ;

* insert more summary computations directly;    

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

proc append base=<collecting-table> data=<new_results>;

OR

insert into <collecting-table> select * from <new-results>;

Наконец, в случае наличия некоторых новых значений результата в самих макропеременных, вы можете вставить эти значения с помощью предложения VALUE. У вас есть буквальная кавычка для любого разрешения макропеременной, которое будет отображено в символьный столбец.

insert into <collecting-table> values ("&genre", &genre.mean, ...);
...