🔒 This topic is solved and locked.
Need further help from the community? Please
sign in and ask a new question.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 03-30-2022 12:21 PM
(1739 views)
I am looking to take a column off an existing dataset (Weight in the example below), do logic on it in IML and then add a new column to the existing data set (or create a new dataset with all the columns from the original and the new column). Thank you.
proc iml;
ds = "Sashelp.Class";
use (ds);
read all var _NUM_ into X;
close (ds);
...do some vector logic using Weight...
...add the new column vector back onto the original dataset...
run;
1 ACCEPTED SOLUTION
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The easiest way is to create a new data set that has the new column(s) and then merge with the original data:
proc iml;
ds = "Sashelp.Class";
use (ds);
read all var _NUM_ into X[c=VarNames];
close (ds);
print varNames;
weight = X[,'Weight'];
NewWeight = 2*weight;
create NewCol var "NewWeight";
append;
close;
QUIT;
data newClass;
merge Sashelp.Class NewCol;
run;
proc print data=NewClass; run;
2 REPLIES 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The easiest way is to create a new data set that has the new column(s) and then merge with the original data:
proc iml;
ds = "Sashelp.Class";
use (ds);
read all var _NUM_ into X[c=VarNames];
close (ds);
print varNames;
weight = X[,'Weight'];
NewWeight = 2*weight;
create NewCol var "NewWeight";
append;
close;
QUIT;
data newClass;
merge Sashelp.Class NewCol;
run;
proc print data=NewClass; run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Why not use a table?
proc iml;
t = TableCreateFromDataSet("Sashelp", "Class");
NewWeight = TableGetVarData(t, "Weight")#2;
call TableAddVar(t, "NewWeight", NewWeight);
call TableWriteToDataSet(t, "work", "NewClass");
quit;
proc print data=NewClass;
run;