Hello everyone,
Because I had been stuck in this code for an afternoon and cannot pass it on,
and there was not an error nor any output to this code.
I have to post it to ask for help~~~
Thanks for any guidance!
options MPRINT;
%MACRO pam(lib=,dsn=,obs=);
%let dirdata=/folders/myfolders;
%let dirOUT=/folders/myfolders;
%let lib=WORK;
%let dsn=tb2000;
%let obs=5;
libname &lib "&dirdata";
run;
data &dsn;
infile "&dirdata&lib..&dsn";
proc print data=&dsn &obs;
title "Listing of first 5 records from &lib, &dsn,";
title2 "on &sysday, &sysdate..";
run;
%mend pam(lib=, dsn=,obs=);
The LOG showed:
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 72 73 options MPRINT; 74 75 %MACRO pam(lib=,dsn=,obs=); 76 %let dirdata=/folders/myfolders; 77 %let dirOUT=/folders/myfolders; 78 %let lib=WORK; 79 %let dsn=tb2000; 80 %let obs=5; 81 libname &lib "&dirdata"; 82 run; 83 data &dsn; 84 infile "&dirdata&lib..&dsn"; 85 proc print data=&dsn &obs; 86 title "Listing of first 5 records from &lib, &dsn,"; 87 title2 "on &sysday, &sysdate.."; 88 run; 89 %mend pam(lib=, dsn=,obs=); WARNING: Extraneous text on %MEND statement ignored for macro definition PAM. 90 91 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 104
What did I miss in the code..:(
Thanks!!!
This:
data pam;
infile "&dirdata/Programs/Week_6/tb2000.sas7bdat";
proc print data=pam;
run;
is quite obviously wrong. A .sas7bdat is a SAS dataset, not an external file; it is read with a set statement, or used where needed in a data= option.
So the proper way to go about this is to define a library, and use that to access your dataset.
libname pam "&dirdata./Programs/Week_6/";
proc print data=pam.tb2000;
run;
Extraneous text on %MEND statement ignored for macro definition PAM.
Isn't that text clear?
%mend; suffices. No extra parameters.
Since I saw your other post earlier, I think that the following is what you're trying to do:
libname testdata '/folders/myfolders'; /* for test purposes only .. create tb200 using sashelp.class data testdata.tb2000; set sashelp.class; run; */ %MACRO pam(lib=work,dsn=_LAST_,obs=5); proc print data=&lib..&dsn. (obs=&obs); title "Listing of first &obs. records from &lib..&dsn."; title2 "on &sysday, &sysdate."; run; %mend pam; %pam(lib=testdata, dsn=tb2000,obs=8)
Art, CEO, AnalystFinder.com
hmm.
even if I get no errors for this code:
options MPRINT;
%MACRO pam;
%let dirdata=/folders/myfolders;
%let dirOUT=/folders/myfolders;
libname &lib "&dirdata";
data &dsn;
infile "&dirdata&lib..&dsn";
run;
proc print data=&dsn;
title "Listing of first 5 records from &lib, &dsn,";
title2 "on &sysday, &sysdate..";
run;
%mend;
The LOG showed:
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 72 73 options MPRINT; 74 75 %MACRO pam; 76 %let dirdata=/folders/myfolders; 77 %let dirOUT=/folders/myfolders; 78 79 libname &lib "&dirdata"; 80 data &dsn; 81 infile "&dirdata&lib..&dsn"; 82 run; 83 84 proc print data=&dsn; 85 title "Listing of first 5 records from &lib, &dsn,"; 86 title2 "on &sysday, &sysdate.."; 87 run; 88 %mend; 89 90 91 92 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 105
But I still have not got any output.
I will run your code to give a try...
I think I should get an output with those two titles...:(
This is the LOG for your code.
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 72 73 libname testdata '/folders/myfolders'; NOTE: Libref TESTDATA refers to the same physical library as WEEK_6. NOTE: Libref TESTDATA was successfully assigned as follows: Engine: V9 Physical Name: /folders/myfolders 74 75 /* 76 for test purposes only .. create tb200 using sashelp.class 77 data testdata.tb2000; 78 set sashelp.class; 79 run; 80 */ 81 82 %MACRO pam(lib=work,dsn=_LAST_,obs=5); 83 proc print data=&lib..&dsn. (obs=&obs); 84 title "Listing of first &obs. records from &lib..&dsn."; 85 title2 "on &sysday, &sysdate."; 86 run; 87 %mend pam; 88 89 %pam(lib=testdata, dsn=tb2000,obs=8) MPRINT(PAM): proc print data=testdata.tb2000 (obs=8); ERROR: File TESTDATA.TB2000.DATA does not exist. MPRINT(PAM): title "Listing of first 8 records from testdata.tb2000"; MPRINT(PAM): title2 "on Sunday, 11MAR18"; MPRINT(PAM): run; NOTE: The SAS System stopped processing this step because of errors. NOTE: PROCEDURE PRINT used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 90 91 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 104
The file '/folders/myfolders/tb2000.sas7bdat' doesn't exist, thus you can't print it.
Art, CEO, AnalystFinder.com
I have uploaded it to the library "Week_6"
And the LOG has not showed that it does not exist.
My code is as below:
options MPRINT;
%MACRO pam;
%let dirdata=/folders/myfolders;
%let dirOUT=/folders/myfolders;
libname Week_6 "&dirdata";
data pam;
infile "&dirdata/Programs/Week_6/tb2000.sas7bdat";
proc print data=pam;
run;
%macro pam;
title "Listing of first 5 records from library &lib, member &dsn,";
title2 "on &sysday, &sysdate..";
proc print data=&lib..&dsn(obs=5);
run;
title;
%mend pam;
The LOG:
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 2 TITLE; 3 FOOTNOTE; 4 OPTIONS LOCALE=en_US DFLANG=LOCALE; 5 DATA _NULL_; 6 RUN; 7 OPTIONS VALIDVARNAME=V7; 8 OPTIONS VALIDMEMNAME=COMPAT; 9 FILENAME _HTMLOUT TEMP; 10 FILENAME _RTFOUT TEMP ENCODING='UTF-8'; 11 FILENAME _PDFOUT TEMP; 12 FILENAME _GSFNAME TEMP; 13 FILENAME _DATAOUT TEMP; 14 %LET SYSCC=0; 15 %LET _CLIENTAPP='SAS Studio'; 16 %LET _CLIENTAPPABREV=Studio; 17 %LET _CLIENTAPPVERSION=3.7; 18 %LET _CLIENTVERSION=3.7; 19 %LET _CLIENTMODE=basic; 20 %LET _SASSERVERNAME=%BQUOTE(localhost); 21 %LET _SASHOSTNAME=%BQUOTE(localhost); 22 %LET _SASPROGRAMFILEHOST=%BQUOTE(localhost); 23 %LET _CLIENTUSERID=%BQUOTE(sasdemo); 24 %LET _CLIENTUSERNAME=%BQUOTE(sasdemo); 25 %LET CLIENTMACHINE=%BQUOTE(10.0.2.2); 26 %LET _CLIENTMACHINE=%BQUOTE(10.0.2.2); 27 %let SASWORKLOCATION="%sysfunc(getoption(work))/"; 28 FILENAME _CWD '.'; 29 DATA _NULL_; 30 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD')); 31 RUN; 32 FILENAME _CWD; 33 34 %LET _SASPROGRAMFILE = %NRQUOTE(%NRSTR(/folders/myfolders/Programs/Week_6/ChenJenli_jc3992_Assignment5.sas)); 35 %LET _BASEURL = %BQUOTE(http://localhost:10080/SASStudio/); 36 %LET _EXECENV=SASStudio; 37 DATA _NULL_; 38 CALL SYMPUT("GRAPHINIT",""); 39 CALL SYMPUT("GRAPHTERM",""); 40 RC=TSLVL('GEOCODE','N'); 41 _ERROR_=0; 42 IF (RC^=' ') THEN DO; 43 CALL SYMPUT("GRAPHINIT","GOPTIONS RESET=ALL GSFNAME=_GSFNAME;"); 44 CALL SYMPUT("GRAPHTERM","GOPTIONS NOACCESSIBLE;"); 45 END; 46 RUN; 47 DATA _NULL_; 48 RC=SYSPROD("PRODNUM002"); 49 IF (RC^=1) THEN DO; 50 CALL SYMPUT("GRAPHINIT",""); 51 CALL SYMPUT("GRAPHTERM",""); 52 END; 53 RUN; 54 %LET _DATAOUT_MIME_TYPE=; 55 %LET _DATAOUT_NAME=; 56 %LET _DATAOUT_TABLE=; 57 %LET _DATAOUT_URL=; 58 %SYMDEL _DATAOUT_MIME_TYPE _DATAOUT_NAME _DATAOUT_URL _DATAOUT_TABLE; 59 %LET _SASWS_ = %BQUOTE(/folders/myfolders); 60 %LET _SASWSTEMP_=%BQUOTE(/folders/myfolders/.sasstudio/.images/5758c3cf-6519-489b-8bcc-fb17f767c995); 61 ODS LISTING CLOSE; 62 ODS AUTONAVIGATE OFF; 63 ODS GRAPHICS ON; 64 ODS HTML5 (ID=WEB) DEVICE=PNG GPATH="&_SASWSTEMP_" ENCODING=utf8 FILE=_HTMLOUT (TITLE='Results: 64 ! ChenJenli_jc3992_Assignment5.sas') STYLE=Htmlblue OPTIONS(BITMAP_MODE='INLINE' OUTLINE='ON' SVG_MODE='INLINE' 64 ! CSS_PREFIX='.ods_5758c3cf-6519-489b-8bcc-fb17f767c995' BODY_ID='div_5758c3cf-6519-489b-8bcc-fb17f767c995' ); 65 ODS RTF (ID=WEB) STYLE=Rtf FILE=_RTFOUT sasdate; 66 ODS PDF (ID=WEB) STYLE=Pearl FILE=_PDFOUT; 67 &GRAPHINIT; 68 OPTIONS FIRSTOBS=1; 69 OPTIONS OBS=MAX; 70 OPTIONS DTRESET DATE NUMBER NOTES; 71 OPTIONS NOTES STIMER SOURCE NOSYNTAXCHECK; 72 73 74 options MPRINT; 75 76 %MACRO pam; 77 78 %let dirdata=/folders/myfolders; 79 %let dirOUT=/folders/myfolders; 80 81 libname Week_6 "&dirdata"; 82 data pam; 83 infile "&dirdata/Programs/Week_6/tb2000.sas7bdat"; 84 proc print data=pam; 85 run; 86 87 %macro pam; 88 title "Listing of first 5 records from library &lib, member &dsn,"; 89 title2 "on &sysday, &sysdate.."; 90 proc print data=&lib..&dsn(obs=5); 91 run; 92 title; 93 %mend pam; 94 95 96 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 97 ODS HTML CLOSE; 98 &GRAPHTERM; ;*';*";*/;RUN;QUIT; 99 QUIT;RUN; 100 ODS HTML5 (ID=WEB) CLOSE; 101 102 ODS RTF (ID=WEB) CLOSE; 103 ODS PDF (ID=WEB) CLOSE; 104 FILENAME _GSFNAME; 105 DATA _NULL_; 106 RUN; 107 OPTIONS VALIDMEMNAME=COMPAT; 108 OPTIONS NOTES STIMER SOURCE SYNTAXCHECK; 109
Looks like you created the dataset as a file called pam in your work directory. If so, then all you need is:
%MACRO pam(lib=work,dsn=_LAST_,obs=5); proc print data=&lib..&dsn. (obs=&obs); title "Listing of first &obs. records from &lib..&dsn."; title2 "on &sysday, &sysdate."; run; %mend pam; %pam(dsn=pam,obs=8)
Art, CEO, AnalystFinder.com
Let me try it....
options MPRINT;
%let dirdata=/folders/myfolders;
%let dirOUT=/folders/myfolders;
libname Week_6 "&dirdata" ;
data pam;
infile "&dirdata/Programs/Week_6/tb2000.sas7bdat" ;
proc print data=pam;
run;
%macro pam(lib=WORK, dsn=_LAST_, obs=5);
proc print data=&lib..&dsn.(obs=&obs);
title "Listing of first 5 records from library &lib, member &dsn," ;
title2 "on &sysday, &sysdate.." ;
run;
title;
%mend pam;
%pam(dsn=pam,obs=5);
LOG :
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 2 TITLE; 3 FOOTNOTE; 4 OPTIONS LOCALE=en_US DFLANG=LOCALE; NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. 5 DATA _NULL_; 6 RUN; 7 OPTIONS VALIDVARNAME=V7; 8 OPTIONS VALIDMEMNAME=COMPAT; 9 FILENAME _HTMLOUT TEMP; 10 FILENAME _RTFOUT TEMP ENCODING='UTF-8'; 11 FILENAME _PDFOUT TEMP; 12 FILENAME _GSFNAME TEMP; 13 FILENAME _DATAOUT TEMP; 14 %LET SYSCC=0; 15 %LET _CLIENTAPP='SAS Studio'; 16 %LET _CLIENTAPPABREV=Studio; 17 %LET _CLIENTAPPVERSION=3.7; 18 %LET _CLIENTVERSION=3.7; 19 %LET _CLIENTMODE=basic; 20 %LET _SASSERVERNAME=%BQUOTE(localhost); 21 %LET _SASHOSTNAME=%BQUOTE(localhost); 22 %LET _SASPROGRAMFILEHOST=%BQUOTE(localhost); 23 %LET _CLIENTUSERID=%BQUOTE(sasdemo); 24 %LET _CLIENTUSERNAME=%BQUOTE(sasdemo); 25 %LET CLIENTMACHINE=%BQUOTE(10.0.2.2); 26 %LET _CLIENTMACHINE=%BQUOTE(10.0.2.2); 27 %let SASWORKLOCATION="%sysfunc(getoption(work))/"; 28 FILENAME _CWD '.'; 29 DATA _NULL_; 30 CALL SYMPUT('_SASWORKINGDIR',PATHNAME('_CWD')); 31 RUN; 32 FILENAME _CWD; 33 34 %LET _SASPROGRAMFILE = %NRQUOTE(%NRSTR(/folders/myfolders/Programs/Week_6/ChenJenli_jc3992_Assignment5.sas)); 35 %LET _BASEURL = %BQUOTE(http://localhost:10080/SASStudio/); 36 %LET _EXECENV=SASStudio; NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. ________________________________________________________________________________________________________________________ 49 NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 37 DATA _NULL_; 38 CALL 38 ! SYMPUT("GRAPHINIT" _ 49 38 ! ,""); 39 CALL 39 ! SYMPUT("GRAPHTERM" _ 49 39 ! ,""); NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 40 RC=TSLVL('GEOCODE','N'); 41 _ERROR_=0; 42 IF (RC^=' ') THEN DO; 43 CALL SYMPUT("GRAPHINIT","GOPTIONS RESET=ALL GSFNAME=_GSFNAME;"); ___ ________________ 49 49 44 CALL SYMPUT("GRAPHTERM","GOPTIONS NOACCESSIBLE;"); ___ ___________________________________ 49 49 NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 45 END; 46 RUN; 47 DATA _NULL_; 48 RC=SYSPROD("PRODNUM002" _ 49 48 ! ); NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 49 IF (RC^=1) THEN DO; 50 CALL 50 ! SYMPUT("GRAPHINIT" _ 49 50 ! ,""); NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 51 CALL SYMPUT("GRAPHTERM",""); 52 END; 53 RUN; 54 %LET _DATAOUT_MIME_TYPE=; 55 %LET _DATAOUT_NAME=; 56 %LET _DATAOUT_TABLE=; 57 %LET _DATAOUT_URL=; 58 %SYMDEL _DATAOUT_MIME_TYPE _DATAOUT_NAME _DATAOUT_URL _DATAOUT_TABLE; 59 %LET _SASWS_ = %BQUOTE(/folders/myfolders); 60 %LET _SASWSTEMP_=%BQUOTE(/folders/myfolders/.sasstudio/.images/a98faac7-1ad7-4d9c-984d-53c7da57687d); NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. 61 ODS LISTING CLOSE; 62 ODS AUTONAVIGATE OFF; 63 ODS GRAPHICS ON; 64 ODS HTML5 (ID=WEB) DEVICE=PNG GPATH="&_SASWSTEMP_" ENCODING=utf8 FILE=_HTMLOUT (TITLE='Results: 64 ! ChenJenli_jc3992_Assignment5.sas') STYLE=Htmlblue OPTIONS(BITMAP_MODE='INLINE' OUTLINE='ON' SVG_MODE='INLINE' 64 ! CSS_PREFIX='.ods_a98faac7-1ad7-4d9c-984d-53c7da57687d' BODY_ID='div_a98faac7-1ad7-4d9c-984d-53c7da57687d' ); NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. 65 ODS RTF (ID=WEB) STYLE=Rtf FILE=_RTFOUT sasdate; 66 ODS PDF (ID=WEB) STYLE=Pearl FILE=_PDFOUT; 67 &GRAPHINIT; 68 OPTIONS FIRSTOBS=1; 69 OPTIONS OBS=MAX; 70 OPTIONS DTRESET DATE NUMBER NOTES; 71 OPTIONS NOTES STIMER SOURCE NOSYNTAXCHECK; 72 73 options MPRINT; 74 75 76 77 %let dirdata=/folders/myfolders; 78 %let dirOUT=/folders/myfolders; 79 80 libname Week_6 "&dirdata" ; 81 data pam; 82 infile "&dirdata/Programs/Week_6/tb2000.sas7bdat" ; 83 proc print data=pam; 82 infile "&dirdata/Programs/Week_6/tb2000.sas7bdat" _ 49 82 ! ; NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 84 run; 85 86 %macro pam(lib=WORK, dsn=_LAST_, obs=5); 87 proc print data=&lib..&dsn.(obs=&obs); 88 title "Listing of first 5 records from library &lib, member &dsn," ___________ 49 88 ! ; NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 89 title2 "on &sysday, &sysdate.." ; 90 run; 91 title; 92 %mend pam; 93 94 %pam(dsn=pam,obs=5); 95 96 97 98 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 99 ODS HTML CLOSE; 100 &GRAPHTERM; ;*';*";*/;RUN;QUIT; 101 QUIT;RUN; 102 ODS HTML5 (ID=WEB) CLOSE; 103 104 ODS RTF (ID=WEB) CLOSE; 105 ODS PDF (ID=WEB) CLOSE; 106 FILENAME _GSFNAME; 107 DATA _NULL_; 108 RUN; 109 OPTIONS VALIDMEMNAME=COMPAT; 110 OPTIONS NOTES STIMER SOURCE SYNTAXCHECK; 111
Two problems.
Fiirst,
81 data pam; 82 infile "&dirdata/Programs/Week_6/tb2000.sas7bdat" ;
is not how you would create the file pam.
I would use:
%let dirdata=/folders/myfolders/Programs/Week_6; data pam; set "&dirdata./tb2000"; run;
Then I would use:
%MACRO pam(lib=work,dsn=_LAST_,obs=5); proc print data=&lib..&dsn. (obs=&obs); title "Listing of first &obs. records from &lib..&dsn."; title2 "on &sysday, &sysdate."; run; %mend pam; %pam(dsn=pam,obs=8)
Art, CEO, AnalystFinder.com
Thanks!! But I found I need not create another data name.
I should have used the macro pam as the data name.
So I tried again.
well...
I thought I have to define it firstly.
My understanding of %macro is I had to do it firstly without %macro,
and then project the result I had earlier to the %macro.
So others can make changes with my code on the %macro.
Is my understanding correct?
%macro pam;
is the start of the definition of the macro
%mend;
is the end of the definition
%pam;
calls the macro
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.