@y658li wrote:
ERROR 133-185: A loop variable cannot be an array name or a character variable; It must be a scalar numeric.
Hi this is my code:
data new_table;
if 0 then set CORP_CCAR_RESUBMIT(keep=Segment);
scenario_date=.;
set CORP_CCAR_RESUBMIT;
_n_=input(cats(actual_year,actual_quarter),yyq6.);
array time Q1-Q20;
do i=1 to dim(time);
scenario_date=intnx('qtr',_n_,i);
number=time(i);
output;
end;
drop Q1-Q20 actual_year actual_quarter;
format scenario_date yyq6.;
run;
and this is my log:
127 do i=1 to dim(time);
_
133
NOTE: The array time has the same name as a SAS-supplied or user-defined function. Parentheses following this name are treated as array references and not function references.
ERROR 133-185: A loop variable cannot be an array name or a character variable; It must be a scalar numeric.
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
127:7
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
128:33 129:15
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.NEW_TABLE may be incomplete. When this step was stopped there were 0 observations and 26 variables.
WARNING: Data set WORK.NEW_TABLE was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
user cpu time 0.00 seconds
system cpu time 0.00 seconds
memory 435.40k
OS Memory 28844.00k
Timestamp 2020-09-18 01:43:05 PM
Step Count 641 Switch Count 0
Page Faults 0
Page Reclaims 13
Page Swaps 0
Voluntary Context Switches 0
Involuntary Context Switches 0
Block Input Operations 0
Block Output Operations 8
Since your LOG does not start with "data new_table" then either your LOG entry is incomplete or you did not submit these lines:
data new_table;
if 0 then set CORP_CCAR_RESUBMIT(keep=Segment);
scenario_date=.;
set CORP_CCAR_RESUBMIT;
_n_=input(cats(actual_year,actual_quarter),yyq6.);
array time Q1-Q20;
Since you did not post the log into a code box as suggested then these lines:
127 do i=1 to dim(time);
_
133
NOTE: The array time has the same name as a SAS-supplied or user-defined function. Parentheses following this name are treated as array references and not function references.
ERROR 133-185: A loop variable cannot be an array name or a character variable; It must be a scalar numeric.
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
127:7
Cannot be used to diagnose as intended. One critical piece of information here is the note about Numeric values converted to character at position 7 on line 127. That is what the 127:7 means.
You show
127 do i=1 to dim(time);
I have a very strong suspicion that you have a variable named I in your data set that is character. So the number 1 is being converted to '1' for the loop. Which means the "to" range is not allowed. When character values are used as loop controls they have to be listed and comma separated. However since the way you posted the incomplete log it is not possible to actual determine that 1 is actually in column 7 or not.
You have notes
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
128:33 129:15
Which indicates there are probably problems with lines 128 and 129. But those lines are not included.
By the entire data step, in the log, start copying at "data " and copy everything through the last note or warning.
And paste in the forum into a code box opened using the </> icon. You can see from this post what the results look like.
Here is part of log pasted as I request:
1 data junk;
2 set sashelp.class;
3 array j _numeric_;
4 do i = '1' to dim(j);
5 x=j[i]*3;
6 put x=;
7 end;
8 run;
NOTE: Character values have been converted to numeric
values at the places given by: (Line):(Column).
4:11
Here is the same thing pasted in the main message window:
1 data junk; 2 set sashelp.class; 3 array j _numeric_; 4 do i = '1' to dim(j); 5 x=j[i]*3; 6 put x=; 7 end; 8 run;
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 4:11
In the code box I can count characters and tell that line 4:11 means the (obvious) character conversion. Without the code box you can't tell.
... View more