Я пытаюсь использовать цикл% DO для добавления нескольких ежемесячных файлов данных. Вот код, который я до сих пор:SAS% DO Loop для извлечения нескольких наборов данных
options mprint symbolgen source mlogic merror syntaxcheck ;
%MACRO INT;
%DO i=01 %TO 03 %BY 1;
libname appd "Qual1.Qual2.Qual3.QUAL416&i." disp=shr;
data work&i.;
set appd.file;
run;
data final;
set work;
run;
proc append data=work&i.
base=final;
run;
%MEND;
%INT;
Я получаю сообщение об ошибке:
ПРЕДУПРЕЖДЕНИЕ: Строка в кавычках в данный момент обрабатывается стала более , чем 262 символов. У вас может быть несбалансированная котировка марок.
Я никогда не получал эту ошибку раньше, и я не совсем уверен, что это значит. Я пытаюсь создать этот макрос, чтобы добавить несколько файлов с этого года, но в идеале он будет охватывать несколько лет. т. е. изменение mtro16 & i. к mtro & i. ЗА ИСКЛЮЧЕНИЕМ Я не хочу, чтобы код %DO i=1601 %TO 1612 %BY 1
явно, потому что мне придется менять его на каждый год, например. если я начну в 2010 году, мне придется писать код 2010, затем отдельный отчет %DO
за 2011 год и т. д. до 2016 года. Это не похоже на много, но через десятилетие> + это может быть.
UPDATE: Я изменил код, чтобы включить этот бит:
`%DO i=1005 %TO 1607;
%IF i=1013 %THEN %DO i=1101 %TO 1112;
/*%ELSE %IF i=1113 %THEN %DO i=1201 %TO 1212;*/
/*%ELSE %IF i=1213 %THEN %DO i=1301 %TO 1312;*/
/*%ELSE %IF i=1313 %THEN %DO i=1401 %TO 1412;*/
/*%ELSE %IF i=1413 %THEN %DO i= 1501 %TO 1512;*/
/*%ELSE %IF i=1513 %THEN %DO i=1601 %TO 1607;*/`
Это своего рода Janky, но я думал, что это будет работать только петлю до конца года, а затем начать следующую итерацию после i=1012 to i=1101
, Тем не менее, это то, что происходит в моем журнале:
MLOGIC(INT): %DO loop index variable I is now 1012; loop will iterate again.
MLOGIC(INT): %IF condition i=1013 is FALSE
MLOGIC(INT): %DO loop index variable I is now 1013; loop will iterate again.
MLOGIC(INT): %IF condition i=1013 is FALSE
Как SAS лечения этого %IF
состояние? Он говорит мне, что переменная i = 1013
и что %IF
условие i=1013
ЛОЖНО? Почему это не ИСТИНА?
Я обычно получаю такого рода предупреждение при создании макропеременной, устраняющей в строку и сама строка имеет более указанные символы. Он может быть абсолютно корректным и работать нормально, но SAS думает, что может возникнуть проблема, поскольку он не предназначен для ожидания строк до тех пор, пока это не будет. Если код сделает так, как ожидалось, я бы не стал беспокоиться об этом, так как я не думаю, что вы можете остановить его от создания предупреждения. Тем не менее, у вас нет% конца; закрыть свою петлю, чтобы она просто конкатенировала их все вместе? –
SMH. Я пропущу их все время – DukeLuke
Кроме того, переменная 01 в вашей инструкции do решит 1 в макросе при вызове. поэтому вы получите mtro161 через mtro163. Вам нужно будет добавить что-то вроде длины if <2, а затем j = strip (0 || i), чтобы связать подозрительный вывод с первым нулем, а затем создать ваше имя mtro16 & j. вместо. –