2015-07-10 2 views
-1

Мне нужно разбить этот макрос SAS, который добавляет суффиксы к некоторому числу переменных в псевдокод, но есть некоторые его части, которые я не совсем понимаю.Ломать макрос SAS в псевдокоде

%macro add_suffix(lib,dsn, suffix); 
    options pageno=1 nodate; 
    OPTIONS OBS= 1; 
    DATA GRIDWORK.TMP; 
    SET &lib..&dsn.; 
    RUN; 

    proc sql noprint; 
    select nvar into :num_vars 
     from dictionary.tables 
      where libname="GRIDWORK" and 
       memname="TMP"; 
    select distinct(name) into :var1- 
     :var%TRIM(%LEFT(&num_vars)) 
    from dictionary.columns 
     where libname="GRIDWORK" and 
      memname="TMP"; 
    quit; 

    run; 

    OPTIONS OBS= MAX; 
    proc datasets library=&LIB; 
     modify &DSN; 
     rename 
      %do i=1 %to &num_vars; 
       &&var&i=&&var&i..&suffix 
      %end; 
     ; 
    quit; 

    run; 

    proc datasets library=&LIB; 
     modify &DSN; 
     rename pers_gen_key&suffix = pers_gen_key; 
    quit; 

    run; 

    proc sql; 
     drop table gridwork.tmp; 
    quit; 
%mend add_suffix; 

1) В этой части кода:

DATA GRIDWORK.TMP; 
SET &lib..&dsn.; 
RUN; 

Как вы настройки набора данных, равный двум значениям? Установляет ли GRIDWORK.TMP конкатенацию & lib и & dsn? Что именно здесь означают несколько периодов?

2) Я понимаю, что этот раздел хранения переменных в массиве:

proc sql noprint; 
    select nvar into :num_vars 
     from dictionary.tables 
      where libname="GRIDWORK" and 
       memname="TMP"; 
    select distinct(name) into :var1- 
     :var%TRIM(%LEFT(&num_vars)) 
    from dictionary.columns 
     where libname="GRIDWORK" and 
      memname="TMP"; 
quit; 

Как именно dictionary.tables и dictionary.columns работают, и как они отличаются от друг друга в этом контексте? Here - это документация, я прочитал ее, но мне все еще трудно понять, что именно происходит в этом разделе кода.

3) В конце макроса мы имеем:

OPTIONS OBS= MAX; 
proc datasets library=&LIB; 
    modify &DSN; 
    rename 
     %do i=1 %to &num_vars; 
      &&var&i=&&var&i..&suffix 
     %end; 
    ; 
quit; 
run; 

Here является документация для процедуры Proc наборов данных. Он говорит, что он называет библиотеку, обрабатываемую процедурой. Означает ли это, что & dsn является частью библиотеки библиотеки &? Наверное, я не уверен, как работают библиотеки в SAS. Они встроены или определены пользователем? Почему они необходимы, не могли бы мы просто изменить & DSN самостоятельно?

+0

Это три вопроса в одном - пожалуйста, ограничивайте один вопрос одновременно. Это в значительной степени показывает, что у вас нет базового понимания SAS; ответы на все вышеуказанные вопросы можно получить, потратив несколько дней на чтение документации SAS и/или на базовый класс SAS. – Joe

+0

Также обратите внимание на «option mprint;» и для получения дополнительной информации об отладке вы можете включить «option mlogic symbolgen macrogen;». Это может помочь вам понять, что происходит. –

+0

@Joe, что это за правильный протокол здесь, не должен ли я отвечать на этот вопрос, удалить мой ответ сейчас? – Reeza

ответ

0
  1. SAS имеет две ссылки на уровень, имя библиотеки, а затем имя набора данных. Первая макро переменная указывает на библиотеку, а вторая - на имя набора данных. Период сообщает макропроцессору, где заканчивается макропеременная, и второй период используется для разделения имени lib из имени набора данных.

  2. Не хранится в массивах, его создаются макропеременные. Таблицы словарей представляют собой метаданные о ваших таблицах. Я бы рекомендовал на самом деле посмотреть на них. Разница между таблицами заключается в том, что TABLES имеет информацию о вашем наборе данных, а COLUMNS содержит информацию об переменных в каждой таблице.

  3. Библиотека - это просто каталог/папка, в которой хранятся наборы данных SAS. Это позволяет SAS ссылаться на разные каталоги для сохранения файлов и позволяет пользователям внедрять организационные системы в свои данные. & dsn - это набор данных в папке lib &.

Я настоятельно рекомендую вам посмотреть в %put заявление и поместить его в различных частях кода, чтобы увидеть именно то, что делает код.

Смежные вопросы