I am currently having a problem with this SAS program: /**** PROGRAM SUMMARY AND INPUTS ****/ %LET simloadfl=1; /* Set 'simloadfl' to 1 to simulate load (and then update load sim inputs). */ %LET p_inputs='I:\2013_MTP\Budget\Simulations\Inputs\'; /* Folder input files are located. */ %LET fn_NGPrices='tblMonthlyGasPrices2013BP_HI.csv'; /* Create library for permanent SAS datasets. */ libname prosym &p_inputs; options mprint mlogic symbolgen; %MACRO loadsims; /* The following variables will be used in the process to import user-specified input files. */ data _NULL_; call symput("pfn_NGPrices",cats("'",&p_inputs,&fn_NGPrices,"'")); %PUT &pfn_NGPrices; run; /* Monthly gas prices */ proc import datafile = &pfn_NGPrices out = inp_NGPrices DBMS = CSV REPLACE; run; %MEND loadsims; data _NULL_; if &simloadfl = 1 then call execute('%loadsims'); run; What is supposed to happen is that the path and filename are loaded separately into two variables using %LET statements. The reason for this is that many inputs will be used but they will all be in the same folder so it is easier to just list the path once instead of including it with each filename. The macro loadsims is supposed to concatenate the filename and path together and put them in the variable pfn_NGPrices using call symput in a data step. The proc import statement should then import the file located at the address pfn_NGPrices. The problem is that each time the program is run, the pfn_NGPrices that is actually read is from the last time I ran this program. As an example, if I run the program once using the let statement: %LET fn_NGPrices='tblMonthlyGasPrices2013BP_HI.csv'; And this is the first time I have run the program since opening SAS Enterprise, it will import the correct file. If I then change the let statement to read: %LET fn_NGPrices='tblMonthlyGasPrices2013BP_LO.csv'; And run the program again, it will import the tblMonthlyGasPrices2013BP_HI.csv (the name from the previous run) instead of correctly importing tblMonthlyGasPrices2013BP_LO.csv. My best guess is that so SAS enters the loadsims macro, sees the &pfn_NGPrices and fills it with whatever value it has handy (this would be why the value of the previous run is filled in), THEN it goes back, does the call symput step and fills in the correct value to the pfn_NGPrices variable which is why it works correctly on the next run. See: http://www2.sas.com/proceedings/sugi31/251-31.pdf But I’m not sure if my understanding of the flow of SAS programs is correct. Does anyone know if this might be the problem and if so how to fix it? I’m still somewhat confused about how SAS interprets and executes macros. Thanks for the help!
... View more