Изменить: учитывая новую информацию, ответ меняется. Остальное оставляю на случай, если пригодится.
У вас есть набор данных формата, а не каталог формата. Вам нужно запустить это:
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