После того, как макропроцессор завершил свою магию, сгенерированный код SAS затем активируется самим SAS.
Причина, по которой такой код:
reportDate = input(1905,yymmn4.);
приводит к отсутствующему значениюобъясняется примечанием, что SAS записывает в журнал.
478 data tst;
479 reportDate = input(1905,yymmn4.);
480 run;
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
479:20
Поскольку вы использовали число вместо строки символов для первого аргумента в функции INPUT (), SAS преобразовал его в строку символов для вас.Когда он это сделал, он использовал формат BEST12.
, чтобы вы получили строку ' 1905'
, которая начинается с 8 пробелов.Поскольку вы используете ширину всего 4 символа в вашем информате, результат является пропущенным значением.Последние 8 символов преобразованной строки игнорируются.
Две другие версии исправляют это, давая вместо этого INPUT () строковое значение.Либо путем генерации фактического строкового литерала, либо с помощью функции PUT (), чтобы преобразовать число в строку, используя формат, который не производит начальные пробелы.