Hi. Everyone. I have a dataset test like below. My goal is to set up a logic which is: If the date is less than the new date, then new filter will be applied. Otherwise, old filter will be applied. I have two questions which I hope I could get some advices from everyone here. Question 1: Since I have July, August and September data in dataset test and I didn’t specify the date value in the Macro Price, how could the program tell the first if then condition is false? (shown as below) and returns the result consists of August’s data? MLOGIC(PRICE): %IF condition DATE LT &NEW_DATE is FALSE Question 2: How should I apply this If Then Else logic inside the macro correctly, so I could get old date with old filter and new date with new filter accordingly? Thanks. DATA TEST; FORMAT DATE MMDDYY10.; INPUT DATE MMDDYY10. STORE$ PRODUCT$ PRICE; CARDS; 7/31/2017 A A1 25 7/31/2017 A A2 26 7/31/2017 A A3 27 8/31/2017 B B1 35 8/31/2017 B B2 36 8/31/2017 B B3 37 9/30/2017 C C1 45 9/30/2017 C C2 46 9/30/2017 C C3 47 ; RUN; %LET NEW_DATE = '31AUG2017'D; %LET OLD_DATE = '31JUL2017'D; %LET FILTER_OLD=%STR(STORE="A"); %LET FILTER_NEW=%STR(STORE="B"); %PUT &FILTER_NEW &FILTER_OLD &NEW_DATE &OLD_DATE ; OPTIONS MPRINT MLOGIC; %MACRO PRICE; PROC SQL; CREATE TABLE PRICE AS SELECT DATE, STORE, PRODUCT, PRICE FROM TEST %IF DATE LT &NEW_DATE %THEN WHERE &FILTER_OLD AND DATE=&OLD_DATE; %ELSE WHERE &FILTER_NEW AND DATE=&NEW_DATE;; QUIT; %MEND; %PRICE; PROC PRINT DATA=PRICE; RUN; Obs DATE STORE PRODUCT PRICE 1 8/31/2017 B B1 35 2 8/31/2017 B B2 36 3 8/31/2017 B B3 37 /* THE LOG */ ;*';*";*/;quit;run; 2 OPTIONS PAGENO=MIN; 3 %LET _CLIENTTASKLABEL='Program'; 4 %LET _CLIENTPROJECTPATH=''; 5 %LET _CLIENTPROJECTNAME=''; 6 %LET _SASPROGRAMFILE=; 7 8 ODS _ALL_ CLOSE; 9 OPTIONS DEV=ACTIVEX; 10 GOPTIONS XPIXELS=0 YPIXELS=0; 11 FILENAME EGSR TEMP; 12 ODS tagsets.sasreport13(ID=EGSR) FILE=EGSR 13 STYLE=HtmlBlue 14 STYLESHEET=(URL="file:///C:/Program%20Files%20(x86)/SASHome/x86/SASEnterpriseGuide/7.1/Styles/HtmlBlue.css") 15 NOGTITLE 16 NOGFOOTNOTE 17 GPATH=&sasworklocation 18 ENCODING=UTF8 19 options(rolap="on") 20 ; NOTE: Writing TAGSETS.SASREPORT13(EGSR) Body file: EGSR 21 22 GOPTIONS ACCESSIBLE; 23 24 DATA TEST; 25 FORMAT DATE MMDDYY10.; 26 INPUT DATE MMDDYY10. STORE$ PRODUCT$ PRICE; 27 CARDS; NOTE: The data set WORK.TEST has 9 observations and 4 variables. NOTE: Compressing data set WORK.TEST increased size by 100.00 percent. Compressed is 2 pages; un-compressed would require 1 pages. NOTE: DATA statement used (Total process time): real time 0.01 seconds user cpu time 0.01 seconds system cpu time 0.01 seconds memory 783.78k OS Memory 20896.00k Timestamp 09/28/2017 11:16:52 AM Step Count 12 Switch Count 58 Page Faults 182 Page Reclaims 162 Page Swaps 0 Voluntary Context Switches 182 Involuntary Context Switches 0 Block Input Operations 0 Block Output Operations 280 37 ; 38 RUN; 39 40 41 42 %LET NEW_DATE = '31AUG2017'D; 43 %LET OLD_DATE = '31JUL2017'D; 44 45 %LET FILTER_OLD=%STR(STORE="A"); 2 The SAS System 11:08 Thursday, September 28, 2017 46 %LET FILTER_NEW=%STR(STORE="B"); 47 %PUT &FILTER_NEW &FILTER_OLD &NEW_DATE &OLD_DATE ; STORE="B" STORE="A" '31AUG2017'D '31JUL2017'D 48 49 OPTIONS MPRINT MLOGIC; 50 51 %MACRO PRICE; 52 PROC SQL; 53 CREATE TABLE PRICE AS 54 SELECT 55 DATE, 56 STORE, 57 PRODUCT, 58 PRICE 59 FROM TEST 60 %IF DATE LT &NEW_DATE %THEN 61 WHERE &FILTER_OLD AND DATE=&OLD_DATE; 62 %ELSE 63 WHERE &FILTER_NEW AND DATE=&NEW_DATE;; 64 QUIT; 65 %MEND; 66 67 %PRICE; MLOGIC(PRICE): Beginning execution. MPRINT(PRICE): PROC SQL; MLOGIC(PRICE): %IF condition DATE LT &NEW_DATE is FALSE MPRINT(PRICE): CREATE TABLE PRICE AS SELECT DATE, STORE, PRODUCT, PRICE FROM TEST WHERE STORE="B" AND DATE='31AUG2017'D; NOTE: Compressing data set WORK.PRICE increased size by 100.00 percent. Compressed is 2 pages; un-compressed would require 1 pages. NOTE: Table WORK.PRICE created, with 3 rows and 4 columns. MPRINT(PRICE): QUIT; NOTE: PROCEDURE SQL used (Total process time): real time 0.00 seconds user cpu time 0.01 seconds system cpu time 0.01 seconds memory 5340.40k OS Memory 26020.00k Timestamp 09/28/2017 11:16:52 AM Step Count 13 Switch Count 32 Page Faults 0 Page Reclaims 39 Page Swaps 0 Voluntary Context Switches 76 Involuntary Context Switches 0 Block Input Operations 0 Block Output Operations 272 MLOGIC(PRICE): Ending execution. 68 69 PROC PRINT DATA=PRICE; RUN; NOTE: There were 3 observations read from the data set WORK.PRICE. NOTE: PROCEDURE PRINT used (Total process time): real time 0.00 seconds user cpu time 0.01 seconds system cpu time 0.00 seconds 3 The SAS System 11:08 Thursday, September 28, 2017 memory 776.12k OS Memory 20896.00k Timestamp 09/28/2017 11:16:52 AM Step Count 14 Switch Count 24 Page Faults 0 Page Reclaims 22 Page Swaps 0 Voluntary Context Switches 25 Involuntary Context Switches 0 Block Input Operations 0 Block Output Operations 8 70 71 72 73 GOPTIONS NOACCESSIBLE; 74 %LET _CLIENTTASKLABEL=; 75 %LET _CLIENTPROJECTPATH=; 76 %LET _CLIENTPROJECTNAME=; 77 %LET _SASPROGRAMFILE=; 78 79 ;*';*";*/;quit;run; 80 ODS _ALL_ CLOSE; 81 82 83 QUIT; RUN; 84
... View more