Olá pessoal, alguém saberia me informar se há como debugar código no SAS Studio usando a plataforma OnDemand? Estou tentando escrever um código, mas só gera erro no log. Na pasta "CSV_FILES" tem dois arquivos simples que criei para testar: base_teste_202001 e base_teste_202012.
Estou tentando carregar uns arquivos de forma automática, onde cada arquivos se chama, respectivamente, base_teste_202001 até.. 202012. No curso "Programming I Essentials" não aborda esse assunto, mas estou tentando entender de forma autodidata.
Alguém saberia e poderia me ajudar nessa questão? Segue código e arquivos para fazer os mesmos testes que fiz e entender onde estou errando.
Desde já agradeço!
LIBNAME CSVFILE "FILEPATH/CSV_FILES";
%MACRO CSVFILE(MYFILE);
%DO I = 1 %TO 12;
PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv"
OUT=CSVFILE.&MYFILE REPLACE
DBMS=CSV;
GETNAMES=YES;
RUN;
%IF &I < 10 %THEN %DO
%CSVFILE(base_teste_2020&CATT("0", &I));
%ELSE %DO
%CSVFILE(base_teste_2020&I);
%END;
%END;
%MEND CSVFILE;
SAS Log
426 %MACRO CSVFILE(MYFILE);
427 %DO I = 1 %TO 12;
428
429 PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv"
430 OUT=CSVFILE.&MYFILE REPLACE
431 DBMS=CSV;
432 GETNAMES=YES;
433 RUN;
434
435 %IF &I < 10 %THEN %DO
436 %CSVFILE(base_teste_2020&CATT("0", &I));
ERROR: An unexpected semicolon occurred in the %DO statement.
ERROR: A dummy macro will be compiled.
437 %ELSE %DO
ERROR: There is no matching %IF statement for the %ELSE.
438 %CSVFILE(base_teste_2020&I);
ERROR: An unexpected semicolon occurred in the %DO statement.
439 %END;
440 %END;
441
442 %MEND CSVFILE;
Use PUTN() to add leading zeros. Put the IMPORT step inside the %DO loop.
Use PUTN () para adicionar zeros à esquerda. Coloque a etapa IMPORT dentro do loop %DO.
%let path=FILEPATH/CSV_FILES;
LIBNAME CSVFILE "&path";
%macro csvfile(prefix);
%local month myfile;
%do month=1 %to 12 ;
%let myfile=&prefix.%sysfunc(putn(&month,z2.));
* import &myfile ;
PROC IMPORT DATAFILE="&path/&MYFILE..csv"
OUT=CSVFILE.&MYFILE REPLACE
DBMS=CSV
;
GETNAMES=YES;
RUN;
%end;
%mend csvfile;
%csvfile(base_teste_2020)
SAS Log
426 %MACRO CSVFILE(MYFILE);
427 %DO I = 1 %TO 12;
428
429 PROC IMPORT DATAFILE="FILEPATH/CSV_FILES/&MYFILE..csv"
430 OUT=CSVFILE.&MYFILE REPLACE
431 DBMS=CSV;
432 GETNAMES=YES;
433 RUN;
434
435 %IF &I < 10 %THEN %DO
436 %CSVFILE(base_teste_2020&CATT("0", &I));
ERROR: An unexpected semicolon occurred in the %DO statement.
ERROR: A dummy macro will be compiled.
437 %ELSE %DO
ERROR: There is no matching %IF statement for the %ELSE.
438 %CSVFILE(base_teste_2020&I);
ERROR: An unexpected semicolon occurred in the %DO statement.
439 %END;
440 %END;
441
442 %MEND CSVFILE;
Use PUTN() to add leading zeros. Put the IMPORT step inside the %DO loop.
Use PUTN () para adicionar zeros à esquerda. Coloque a etapa IMPORT dentro do loop %DO.
%let path=FILEPATH/CSV_FILES;
LIBNAME CSVFILE "&path";
%macro csvfile(prefix);
%local month myfile;
%do month=1 %to 12 ;
%let myfile=&prefix.%sysfunc(putn(&month,z2.));
* import &myfile ;
PROC IMPORT DATAFILE="&path/&MYFILE..csv"
OUT=CSVFILE.&MYFILE REPLACE
DBMS=CSV
;
GETNAMES=YES;
RUN;
%end;
%mend csvfile;
%csvfile(base_teste_2020)
This solution worked. Thank you very much. Now I go to study this code.
Dive into keynotes, announcements and breakthroughs on demand.
Explore Now →