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_:;
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.