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
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.
Ready to level-up your skills? Choose your own adventure.