When used on the right-hand side of an expression, this function returns the number of digits or characters of the variable expression.
For numeric expressions, the value returned represents the precision of the expression and not necessarily the actual number of significant digits. For a float variable or expression, the value returned is either 4 or 8. When the parameter is a numeric literal, the length returned is the number of digits of the literal.
For character, graphic, or UCS-2 expressions the value returned
is the number of characters in the value of the expression. For variable-length
values, such as the value returned from a built-in function or a variable-length
field, the value returned by %LEN is the current length of the character,
graphic, or UCS-2 value.
However, if %LEN is used in a definition statement
as the value for a named constant or the parameter for a keyword,
the value returned by %LEN is the maximum length of the
variable-length field. 
For all other data types, the value returned is the number of bytes of the value.
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D num1 S 7P 2
D NUM1_LEN C %len(num1)
D NUM1_DECPOS C %decpos(num1)
D num2 S 5S 1
D num3 S 5I 0 inz(2)
D chr1 S 10A inz('Toronto ')
D chr2 S 10A inz('Munich ')
D ptr S *
* Numeric expressions:
/FREE
num1 = %len(num1); // 7
num1 = %decpos(num2); // 1
num1 = %len(num1*num2); // 12
num1 = %decpos(num1*num2); // 3
// Character expressions:
num1 = %len(chr1); // 10
num1 = %len(chr1+chr2); // 20
num1 = %len(%trim(chr1)); // 7
num1 = %len(%subst(chr1:1:num3) + ' ' + %trim(chr2));// 9
// %len and %decpos can be useful with other built-in functions:
// Although this division is performed in float, the result is
// converted to the same precision as the result of the eval:
// Note: %LEN and %DECPOS cannot be used directly with %DEC
// and %DECH, but they can be used as named constants
num1 = 27 + %dec (%float(num1)/num3 : NUM1_LEN : NUM1_DECPOS);
// Allocate sufficient space to hold the result of the catenation
// (plus an extra byte for a trailing null character):
num3 = %len (chr1 + chr2) + 1;
ptr = %alloc (num3);
%str (ptr: num3) = chr1 + chr2;
/END-FREE