В настоящее время у меня есть набор данных, который содержит необходимые мне переменные вместе с необходимыми форматами.
Теперь я использую функцию getvarc()
(среди прочих) в цикле, чтобы эти переменные записывались в файл.
Первая проблема, возникающая в ходе курса, заключается в том, что некоторые переменные имеют тип не тип char, а тип num. Я мог бы использовать getvarn()
для их извлечения, но тогда формат уходит впустую, что мне действительно нужно.
например. дата в числовом виде: 18750. Формат = гггммд10. Таким образом, выглядит как 2011-05-03
Используя value=getvarn()
для этого поля, он получит 18750
для значения. Если я затем захочу вывести (используя PUT) это значение, оно не даст мне 2011-05-03
дату, как я хочу.
Так что теперь я ищу лучший способ сделать это.
Первый вариант - использовать набор данных sashelp.vcolumn, чтобы получить формат для этого поля и использовать его в операторе put для вывода в нужном формате.
Второй вариант - преобразовать набор данных, содержащий это поле (на самом деле речь идет о нескольких наборах данных), где я преобразую все поля типа num в типы символов, сохраняя правильный формат.
Какой вариант мне выбрать?
И в случае второго варианта, можно ли это сделать общим способом (как я уже говорил, речь идет не только об одной переменной)?
EDIT:
После ответа Cmjohn я нашел способ решить мою проблему. Не использовать sashelp.vcolumn, а использовать функцию varfmt
.
Итак, краткое объяснение того, что я делаю в своем коде:
data _null_
set dataset1;
file file1;
if somefield = x then do;
dsid = open(datasetfield, i);
rc = fetchobs (dsid);
varnum = varnum(dsid,anotherfield);
**varfmt = varfmt(dsid,anotherfield);
if vartype(dsid,anotherfield) = 'N' then do;**
value = getvarn(dsid,varnum);
**value_formatted = putn(value,varfmt);**
**end;
else do;**
value = getvarc(dsid,varnum);
**value_formatted = putc(value,varfmt);
end;**
put value_formatted;
end;
run;
Так что это вообще (быстро из моей головы), что я делаю сейчас. Смелая часть решения - это то, что я придумал после ответа Cmjohns. Поэтому на мой первый вопрос ответили: «Как это сделать?».
Но мой добавленный вопрос: Что было бы наиболее эффективным в долгосрочной перспективе: сохранить этот процесс или сделать так, чтобы мои данные устанавливали способ, которым все данные могут быть прочитаны, используя только getvarc
без необходимости ввода типа -чек и getfmt()
?