I try out code from another Rick's blog. A test for monotonic sequences and functions - The DO Loop (sas.com)
Somehow, get complains below. Any thoughts?
42601 proc iml;
NOTE: IML Ready
42602 /* Test whether a sequence of elements is monotonic increasing.
42603 Valid options are
42604 strict=0 : (Default) Return 1 if a sequence is nondecreasing
42605 strict=1 : Return 1 if a sequence is strictly increasing
42606 */
42607 start IsIncr(_x, strict=0);
42608 x = colvec(_x);
42609 if nrow(x)=1 then return(1);
42609! /* one element is always monotonic! */
42610 d = dif(x,1,1);
42610! /* lag=1; delete initial missing value */
42611 if strict then
42612 return( all(d > 0) );
42613 return( all(d >= 0) );
42614 finish;
ERROR: Too many arguments for function DIF.
ERROR: Module ISINCR was not defined due to resolution errors.
42615
42616 /* test whether sequences are increasing */
42617 x = {0,2,2,2,6,7,9};
42618 y = {0,1,3,4,6,7,9};
42619 z = {0,1,3,4,2,7,9};
42620 b1 = IsIncr(x);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42620 column 1
42620! /* test weakly increasing */
42621 b2 = IsIncr(x, 1);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42621 column 1
42621! /* test strictly increasing */
42622 b3 = IsIncr(y, 1);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42622 column 1
42622! /* test strictly increasing */
42623 b4 = IsIncr(z);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42623 column 1
42623! /* test weakly increasing */
42624
42625 print b1 b2 b3 b4;
ERROR: Matrix b1 has not been set to a value.
statement : PRINT at line 42625 column 1
42626
42627 /* Test whether a sequence of elements is monotonic decreasing.
42628 strict=0 : (Default) Return 1 if a sequence is nonincreasing
42629 strict=1 : Return 1 if a sequence is strictly decreasing
42630 */
42631 start IsDecr(x, strict=0);
42632 return IsIncr(-x, strict);
42633 finish;
NOTE: Module ISDECR defined.
42634
42635 /* test whether sequence is increasing */
42636 u = {9,8,7,7,6,2,0};
42637 b5 = IsDecr(u);
ERROR: Invocation of unresolved module ISINCR.
statement : RETURN at line 42632 column 4
traceback : module ISDECR at line 42632 column 4
NOTE: Paused in module ISDECR.
42637! /* test weakly decreasing */
42638 b6 = IsDecr(u, 1);
ERROR: Module ISDECR called again before exit from prior call.
statement : ASSIGN at line 42638 column 1
42638! /* test strictly decreasing */
42639 print b5 b6;
ERROR: Matrix b5 has not been set to a value.
statement : PRINT at line 42639 column 1
42640
42641 start Func1(x);
42642 return (5 - 4*x)#log( x/(1-x) );
42643 finish;
NOTE: Module FUNC1 defined.
42644 start Func2(x);
42645 return (5 - 5.2*x)#log( x/(1-x) );
42646 finish;
NOTE: Module FUNC2 defined.
42647
42648 dt = 0.005;
42649 x = do(dt, 1-dt, dt);
42649! /* increasing sequence on a fine grid */
42650 y1 = Func1(x);
42650! /* image of sequence under F1 */
42651 y2 = Func2(x);
ERROR: (execution) Invalid argument to function.
count : number of occurrences is 7
operation : LOG at line 42645 column 26
operands : _TEM1004
_TEM1004 7 rows 1 col (numeric)
0
-2
-2
-2
-1.2
-1.166667
-1.125
statement : RETURN at line 42645 column 4
traceback : module FUNC2 at line 42645 column 4
NOTE: Paused in module FUNC2.
42651! /* image of sequence under F2 */
42652 b1 = IsIncr(y1);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42652 column 1
42653 b2 = IsIncr(y2);
ERROR: Invocation of unresolved module ISINCR.
statement : ASSIGN at line 42653 column 1
42654 print b1 b2;
ERROR: Matrix b1 has not been set to a value.
statement : PRINT at line 42654 column 1
42655
42656 run;
NOTE: Module MAIN is undefined in IML; cannot be RUN.
42656! quit;
NOTE: Exiting IML.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE IML used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds
... View more