I have several datasets, one for each geographical areas. What is a bit hard is that there are 96 areas, but for historical and administrative reasons, they are not indexed 01 to 96 but 01 02 ... 19 2A 2B 21 ...95 Then my datasets are indexed data_d01, data_d02, ... data_d19, data_d2a, data_d2b, data_d21, ... data_d95. So what has been done until now and what I have trying to use is a table that has one variable, called dep2, which takes these values 01 02 ... 19 2A 2B 21 ...95 Then the way to do something for each dataset is to use the following lines %macro MacroStandard(); data _null_; set dep.dep2; /* table des (vrais) DEP reprise de RFL, POTE n'est plus par dir fiscale */ call symput('d'!!left(_n_),dep2); /* la var contenant le code du DEP s'appelle dep2 */ run; %do i=1 %to 96 ; data temporary; set data_d&&d&i; run; %end; %mend MacroStandard; So now what I wanted to do is for each of this dataset, check if one variable exists. So I have found a %Varexist(dataset, variable) macro, that perfectly works when I do %put %Varexist(data_d01, myvar) But I want to do that for each area, so I have tried several combinations. I have now one that is working, but I definitely do not understand why at all, as it works since I have commentated a line to see what was happening, but does not work if I remove the line which is supposed not to be read. Here is my program : %macro TestDep (); data _null_; set dep.dep2; call symput('d'!!left(_n_),dep2); run; %do i=1 %to 96 %put d&&d&i; *%put %VarExist(PotePrec.pote&anprec._d&&d&i,_1DX); %end; %mend TestDep; %TestDep() I would gladly appreciate some help EDIT 1 : Add the macro varexist %macro VarExist(ds,var); %local rc dsid result; %let dsid=%sysfunc(open(&ds)); %if %sysfunc(varnum(&dsid,&var)) > 0 %then %do; %let result=1; %put NOTE: Var &var exists in &ds; %end; %else %do; %let result=0; %put NOTE: Var &var not exists in &ds; %end; %let rc=%sysfunc(close(&dsid)); &result %mend VarExist;
... View more