Calculated is not working in character variable alias.
proc sql;
select name as name1,
calculated (substr(name1,1,2)) as test
from sashelp.class;
quit;
Works fine for me:
proc sql;
select upcase(NAME) as NAME1
,substr(calculated NAME1,1,2) as NAME2
from SASHELP.CLASS;
quit;
NAME1 | NAME2 |
---|---|
ALFRED | AL |
ALICE | AL |
BARBARA | BA |
CAROL | CA |
HENRY | HE |
JAMES | JA |
Works fine for me:
proc sql;
select upcase(NAME) as NAME1
,substr(calculated NAME1,1,2) as NAME2
from SASHELP.CLASS;
quit;
NAME1 | NAME2 |
---|---|
ALFRED | AL |
ALICE | AL |
BARBARA | BA |
CAROL | CA |
HENRY | HE |
JAMES | JA |
Calculated is not a function, so your syntax:
calculated (<some code>)
is invalid, it should read:
calculated <calculated variable name>
And then any further code should appear outside that statement.
This point is however moot as the code:
proc sql;
select name as name1,
substr(name,1,2) as test
from sashelp.class;
quit;
Is in fact all you need, the calculated just adds more processing onto the whole thing so is a waste.
name1 is not a calculated variable within the proc sql syntax. It is an alias you set to an already existing variable from the data file.
Calculated makes sens when you refer to a variable that it is generated in the proc sql.
Consider the following as an example:
proc sql;
select name as name1,
substr(name1,1,2) as test,
length(calculated test) as test1
from sashelp.class;
quit;
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.