Hi All,
I wanted to define an array with dynamic Dimension according the real data. I create a macro variable &MAXCYC, and I checked, it had 25 in my program. Now I want to define an array of &MAXCYC dimension with name as CYCLE_1-CYCLE_&MAXCYC. I used the following format, but I got error message:
ARRAY CYC_N{&MAXCYC} CYCLE_1-CYCLE_&MAXCYC;
MESSAGE:
NOTE: Line generated by the macro variable "MAXCYC".
1 CYCLE 5
-
22
200
ERROR: Missing numeric suffix on a numbered variable list (CYCLE1-CYCLE).
ERROR: Too few variables defined for the dimension(s) specified for the array CYC_N.
ERROR 22-322: Syntax error, expecting one of the following: a name, (, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.
ERROR 200-322: The symbol is not recognized and will be ignored.
How do I solve this issue?
Thanks,
Abdu.
Left-justify the macro variable when you create it - perhaps you used something like -
CALL SYMPUT('MAXCYC', PUT(n, 8.));
Use this instead:
CALL SYMPUT('MAXCYC', LEFT(PUT(n, 8.)));
Alternatively, left-justify when you invoke it:
ARRAY CYC_N{&MAXCYC} CYCLE_1-CYCLE_%LEFT(&MAXCYC);
Left-justify the macro variable when you create it - perhaps you used something like -
CALL SYMPUT('MAXCYC', PUT(n, 8.));
Use this instead:
CALL SYMPUT('MAXCYC', LEFT(PUT(n, 8.)));
Alternatively, left-justify when you invoke it:
ARRAY CYC_N{&MAXCYC} CYCLE_1-CYCLE_%LEFT(&MAXCYC);
Call symputX instead of call symput
or trim the variable in your SQL step:
proc sql;
select trim(count(*)) into :max_count
from blah;
quit;
You can also consider the wildcard operators if you only have the variables in cycle_1 - cycle_5 starting with cycle_ in the dataset. If you have other variables such as cycle_max then this won't work.
array cyc_n(*) cycle_:;
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.