Использование каталога формата SAS

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

libname in 'U:/';
libname library 'U:/';

Options fmtsearch = (library.formats_raw); 

data ae;
set in.ae;
format 
    aeactae $AEMGMT.
    AEACTSM $ACTION.
    AEDVIS $VISIT.
    AEENDT DATE11.
    AEINT $AEINT.
    AEIRLOC $INJSITE.
    AEIRMEAS $YESNO.
    AEIRTERM $ISR.
    AEIRVIS $VISIT.
    AEIRYN $YESNO.
    AEOUT $OUTCOME.
    aerel $aerel.
    AESER $YESNO.
    AESTDT DATE11.
    AEYN $YESNO.
    EVTDT DATE11.
    LASTUPD EURDFDT20.;
run;

Для каждой переменной я получаю следующую ошибку в журнале:

format
            aeactae $AEMGMT.
                     --------               
ERROR 48-59: The format $AEMGMT was not found or could not be loaded.

person Bosley    schedule 16.03.2017    source источник
comment
Какое точное имя файла для каталога форматов?   -  person Joe    schedule 16.03.2017
comment
U:/formats_raw.sas7bdat   -  person Bosley    schedule 16.03.2017
comment
Ах, тогда у вас нет каталога форматов!   -  person Joe    schedule 16.03.2017
comment
Прошу прощения... был отправлен файл sas7bdat, а затем, запустив proc, он преобразовал его в formats_raw.sas7bcat, который, как я думаю, является файлом каталога.   -  person Bosley    schedule 16.03.2017


Ответы (1)


Изменить: учитывая новую информацию, ответ меняется. Остальное оставляю на случай, если пригодится.

У вас есть набор данных формата, а не каталог формата. Вам нужно запустить это:

proc format cntlin=in.formats_raw;
quit;

для импорта форматов. Это, конечно, предполагает, что он создан правильно - он должен иметь, по крайней мере, fmtname, start, label и, возможно, некоторые другие переменные (обычно type, hlo, end).

Это импортирует форматы, сохраненные в наборе данных SAS, в рабочую среду. Если вы хотите создать постоянный каталог, вы должны указать lib=in или там, где вы хотите, чтобы они сохранялись в операторе proc format.


Старый ответ:

Обычно вы все делаете правильно, хотя некоторые вещи вы делаете не так, как нужно.

library libname следует избегать. Это то, что используют люди, которые не знают, как правильно использовать форматы, но на самом деле это не очень хорошая идея, потому что он получает особое предпочтение при поиске формата, что может быть проблематично, если у вас есть более одного. LIBRARY и WORK автоматически включаются в список fmtsearch и имеют высший приоритет, если они явно не перечислены. Но на самом деле это не поможет вам, когда каталог форматов все равно не formats.sas7bcat.

В вашем случае вы должны просто определить его один раз (in), а затем сделать следующее:

libname in 'U:/';
Options fmtsearch = (in.formats_raw work);

Вы помещаете туда work, чтобы убедиться, что ваш каталог форматов имеет приоритет над ним.

Тогда это должно работать, если у вас есть файл formats_raw.sas7bcat в этой папке. Если нет, то у вас может быть что-то еще (например, у вас может быть файл, предназначенный для импорта через cntlin, если это .sas7bdat).

Это простой пример этой работы:

libname temp 'c:\temp';
proc format lib=temp.formats_raw;
  value YNF
  1='Yes'
  2='No'
  ;
quit;

options fmtsearch=(temp.formats_raw work);

data test;
  x=1;
  format x YNF.;
  put x= ynf.;
run;

Измените fmtsearch на (temp work), и вы увидите, что это не работает (поскольку temp\formats.sas7bcat не существует).

person Joe    schedule 16.03.2017
comment
Спасибо - проблема была в том, что я не запустил этот оператор: 'proc format cntlin=in.formats_raw; покидать;' - person Bosley; 16.03.2017