Duda en macro de SAS - Ayuda!
Publicado por Mónica (1 intervención) el 09/05/2011 11:40:40
TENGO ESTE CÓDIGO, DONDE LAS TABLAS A Y B ESTÁN BIEN INFORMADAS, VER ARCHIVOS ADJUNTOS. ¿POR QUÉ LA TABLA RESULTANTE C NO CONTIENE NINGÚN REGISTRO? ¿HAY ALGÚN PROBLEMA EN EL CICLO DE FECHAS QUE GENERA LA MACRO?
Por favor, alguien me puede ayudar? Gracias!
Este es el código:
proc datasets lib = work nolist nowarn memtype = (data view) kill;
quit;
%MACRO X;
%let salir_ciclo=0;
%let num=0;
%let FECHA=0;
%let FECHA_SIGUIENTE=0;
/*aqui*/
proc sql nowarn noprint;
drop table C;
quit;
/**/
/*****************************************************************************************
CICLO PARA RECORRER TODOS LOS MESES ENTRE FECDESDE Y FECHASTA
*****************************************************************************************/
%DO %WHILE (&salir_ciclo=0);
data _NULL_;
FECHA = intnx('month',&DT_PRCS_DESDE,+&NUM,'e');
IF FECHA <= &DT_PRCS_hasta THEN DO;
call symput('FECHA',FECHA);
call symput('num',&NUM+1);
END;
ELSE DO;
call symput('salir_ciclo',1);
END;
run;
%IF &salir_ciclo EQ 0 %THEN %DO;
data C(KEEP=ENTITY CONTRA1 ID_PROD feoperac)
NUM_CONTRATOS(KEEP=FEOPERAC num_Contr);
merge A (IN=A KEEP=ENTITY CONTRA1 ID_PROD)
B (IN=B WHERE=( FECDESDE <= &FECHA AND
FECHASTA > &FECHA ) ) end=last;
by ENTITY CONTRA1;
retain hayContr 0 num_Contr 0;
length FEOPERAC 4.;
IF A and B and hayContr=0 THEN DO;
hayContr=1;
num_Contr = num_Contr + 1;
FEOPERAC=&FECHA;
output WORK.C;
END;
IF last.CONTRA1 THEN DO;
hayContr=0;
END;
IF last THEN DO;
FEOPERAC=&FECHA;
output WORK.NUM_CONTRATOS;
END;
run;
Por favor, alguien me puede ayudar? Gracias!
Este es el código:
proc datasets lib = work nolist nowarn memtype = (data view) kill;
quit;
%MACRO X;
%let salir_ciclo=0;
%let num=0;
%let FECHA=0;
%let FECHA_SIGUIENTE=0;
/*aqui*/
proc sql nowarn noprint;
drop table C;
quit;
/**/
/*****************************************************************************************
CICLO PARA RECORRER TODOS LOS MESES ENTRE FECDESDE Y FECHASTA
*****************************************************************************************/
%DO %WHILE (&salir_ciclo=0);
data _NULL_;
FECHA = intnx('month',&DT_PRCS_DESDE,+&NUM,'e');
IF FECHA <= &DT_PRCS_hasta THEN DO;
call symput('FECHA',FECHA);
call symput('num',&NUM+1);
END;
ELSE DO;
call symput('salir_ciclo',1);
END;
run;
%IF &salir_ciclo EQ 0 %THEN %DO;
data C(KEEP=ENTITY CONTRA1 ID_PROD feoperac)
NUM_CONTRATOS(KEEP=FEOPERAC num_Contr);
merge A (IN=A KEEP=ENTITY CONTRA1 ID_PROD)
B (IN=B WHERE=( FECDESDE <= &FECHA AND
FECHASTA > &FECHA ) ) end=last;
by ENTITY CONTRA1;
retain hayContr 0 num_Contr 0;
length FEOPERAC 4.;
IF A and B and hayContr=0 THEN DO;
hayContr=1;
num_Contr = num_Contr + 1;
FEOPERAC=&FECHA;
output WORK.C;
END;
IF last.CONTRA1 THEN DO;
hayContr=0;
END;
IF last THEN DO;
FEOPERAC=&FECHA;
output WORK.NUM_CONTRATOS;
END;
run;
Valora esta pregunta


0