Если вы просто хотите, чтобы избежать предупреждения, вы можете использовать cats
, который делает это для вас. Это немного глупо, хотя, учитывая, что это в основном такая же работа, как и у put
.
IE:
atptnum = input(cats(mod(egatptnum,10)),egatptnum.);
Несколько меньше символов, но не очень полезно в долгосрочной перспективе (за исключением, если вы хотите использовать автоматически с помощью правой преобразования SAS, но это кажется маловероятным здесь).
В противном случае нет прямого способа сделать то, что вы хотите, используя формат/informat - вы должны либо иметь символ слева, либо символ с правой стороны (или и то и другое), вы не можете использовать числовое числовое значение. Это потому, что это более или менее чит: SAS не создавал форматы/информацию с целью их использования таким образом, это просто удобный способ сделать это, чтобы использовать число в/из преобразования символов.
Существуют всевозможные способы сделать это, которые не используют формат/информацию, если вы предпочитаете. Хэш-таблица - это та же самая работа, которую нужно настроить, и примерно так же быстро (в некоторых случаях быстрее, в некоторых нет, ограничено размером памяти).
data eg2atptnum;
input egtptnum atptnum;
datalines;
1 0
2 2
3 4
4 6
5 8
6 24
;;;;
run;
data _null_;
if _n_=1 then do;
if 0 then set eg2atptnum;
declare hash eg2at(dataset:'eg2atptnum');
eg2at.defineKey('egtptnum');
eg2at.defineData('atptnum');
eg2at.defineDone();
end;
egtptnum=4;
eg2at.find();
put atptnum=;
run;
Почему 'putn' лучше или отличается от' put' здесь? Не похоже, чтобы указать тип во время выполнения, особенно интересно. – Joe
@Joe Это другое ... просто прошел тест против 10 м общ, и он последовательно примерно в 4 раза медленнее. Если у вас много заявлений, и тонны наблюдений (или много циклов макросов), это не будет иметь большого значения. –
@RobertPenridge Я не думал об этом, но это хороший момент. – Joe