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;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.