Если вы изменяете переменную тип или длина , а не только применяемый формат, то вы должны использовать шаг и назначение данных. Вам не нужно использовать два шага данных, хотя это и не нужно; и вы могли бы использовать представление шага данных, если это промежуточный шаг (т. е. это не окончательный конечный файл).
Как я обычно это делаю, это так:
*Change character to numeric;
data want;
set have(rename=var=var_c);
var = input(var_c,informat.);
run;
*Increase length of character variable;
data want;
length var $40;
set have;
run;
Если вы изменяете только формат , а не length , то вы можете сделать это в proc datasets
. Он может изменить большинство метаданных набора данных, но не может изменить фактическую сохраненную длину (что требует перезаписи всего набора данных). Я сомневаюсь, что это то, что вы делаете в приведенном выше примере (хотя вы используете формат по умолчанию и увеличиваете его), хотя; вы вероятно меняете длину .
Обратите внимание, что длина для символьной переменной - это количество символов, которое можно сохранить; в то время как format управляет отображением на экране (но не тем, что хранится). Применение формата к предыдущей необъявленной переменной установит ее длину равной длине формата, но длина и формат - это две в основном несвязанные вещи.