Hi,
I am trying to write a DS2 code in RTDM. This is because I am not able to use Tableselect in calculated variables because FINDW function is not available. I cannot use FIND because I have to find the exact match.
Is there a limit on DS2 code based on the errors below? Or is there any alternative for this? Basically, I'm trying to filter the data grid in such a way that it will only output those that meet the condition. Thank you.
Sample1
PARAMETER - "DEVICE_X|DEVICE_Y|DEVICE_Z" (constant value, extracted from DB table)
CHECK - "DEVICE" (dynamic value and 1 customer can have multiple values, from the source data grid)
Output should be 0
FINDW(PARAMETER, CHECK) = 0 is true (this should not be part of the data grid output)
Sample2
PARAMETER - "DEVICE_X|DEVICE_Y|DEVICE_Z" (constant value, extracted from DB table)
CHECK - "DEVICE_X" (dynamic value and 1 customer can have multiple values, from the source data grid)
Output should be > 0
FINDW(PARAMETER, CHECK) > 0 is true (this should be part of the data grid output)
My source data grid has 195 columns and I have to output the same columns plus a new column that was calculated from the FINDW function. FINDW is working in the code, but when I output all the columns I am hitting error. I added columns by batch in the script to see where it is failing. Some columns are okay, and some columns are hitting below error.
com.sas.analytics.ph.RTDMException: Error executing activity at com.sas.rtdm.implementation.EventExecutor.execute(EventExecutor.java:255) at com.sas.rtdm.implementation.TestExecutor.execute(TestExecutor.java:209) at com.sas.rtdm.implementation.engine.ActivityNode._execute(ActivityNode.java:58) at com.sas.rtdm.implementation.engine.ActivityNode._execute(ActivityNode.java:18) at com.sas.rtdm.implementation.engine.SchedulableNode$1.call(SchedulableNode.java:89) at com.sas.rtdm.implementation.engine.SchedulableNode$1.call(SchedulableNode.java:82) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 8187 at java.lang.String.charAt(String.java:658) at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding.tokenize(DS2ObjectEncoding.java:494) at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding._decodeTableStr(DS2ObjectEncoding.java:352) at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding.decodeTableStr(DS2ObjectEncoding.java:296) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.getOutputValues(DS2Activity.java:439) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.handle_output(DS2Activity.java:316) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.execute(DS2Activity.java:228) at com.sas.rtdm.implementation.EventExecutor.execute(EventExecutor.java:243) ... 9 more
This is excerpt from the code
package CHECK_PARAM/overwrite=yes;
dcl varchar(100) VAR58 /*sample column that hits error*/
method execute(
package tap_table DATAGRID,
varchar(500) PARAMETER,
in_out package tap_table DATAGRID_2
);
dcl int i_row;
DATAGRID_2.clear();
DATAGRID_2.add_column('VAR58','String');
if DATAGRID.row_count() > 0 then do;
i_row=1;
do while ( i_row <= DATAGRID.row_count() );
VAR58 = DATAGRID.getString('VAR58'||'',i_row);
/*Load data*/ DATAGRID_2.add_row();
DATAGRID_2.setString('VAR58 ',i_row,VAR58);
i_row = i_row + 1;
end;/*end do while statement (DATAGRID_2)*/
end;/*end do statement*/
end; /*End Method Execute*/
endpackage; /*End Package*/
run;
quit;
Also, when I try to process more than 2 rows, I am hitting this error "Not enough tokens" / java.util.NoSuchElementException
2023-09-12 16:44:26,409 WARN sasdemo SASDSDesignRepository Test Case 4 com.sas.rtdm.implementation.TestExecutor - Execution faulted: Not enough tokens. Encoded data: "t560194
com.sas.analytics.ph.RTDMException: java.util.NoSuchElementException at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding.decodeTableStr(DS2ObjectEncoding.java:299) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.getOutputValues(DS2Activity.java:439) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.handle_output(DS2Activity.java:316) at com.sas.rtdm.implementation.activity.sasactivity.DS2Activity.execute(DS2Activity.java:228) at com.sas.rtdm.implementation.EventExecutor.execute(EventExecutor.java:243) at com.sas.rtdm.implementation.TestExecutor.execute(TestExecutor.java:209) at com.sas.rtdm.implementation.engine.ActivityNode._execute(ActivityNode.java:58) at com.sas.rtdm.implementation.engine.ActivityNode._execute(ActivityNode.java:18) at com.sas.rtdm.implementation.engine.SchedulableNode$1.call(SchedulableNode.java:89) at com.sas.rtdm.implementation.engine.SchedulableNode$1.call(SchedulableNode.java:82) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.util.NoSuchElementException at java.util.LinkedList.removeFirst(LinkedList.java:270) at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding._decodeTableStr(DS2ObjectEncoding.java:402) at com.sas.rtdm.implementation.activity.sasactivity.DS2ObjectEncoding.decodeTableStr(DS2ObjectEncoding.java:296) ... 13 more
Appreciate feedback on this. Thank you
... View more