If a string variable holds numerical information, it can be treated
like numerical variables in numerical transformations (by the VAR operation.)
To modify true textual information in string variables, a VAR operation
of the form
VAR str(U,p,len)=str(V1,p1,len1)&str(V2,p2,len2)&... TO <data>
where U,V1,V2,... are string variables, is available.
Above, str(U,p,len) means a partial string of U starting from position 'p'
and having length of 'len' bytes. Alternative notations are
str(U) (the whole string field), str(U,p) (the whole field from 'p' onwards).
'&' means concatenation (chaining) of the strings.
On the right hand side also constant strings of the form "ABC" can appear.
(Examples are given on the next page.)
pos(S,p,string) is a useful auxiliary function giving the position of 'string'
in the string variable S after the 'p'th position.
pos(S,string) is the same as pos(S,1,string) .
For example, if S is "ABC:123:X", then pos(S,:)=4, pos(S,5,:)=8, pos(S,Z)=0 .
Conditional VAR statements of the form
VAR Var1=if(str(...)=str(...))then(value1)else(value2) TO DATA1
are allowed. Also <,>,<> etc. are possible as relational symbols.
Also string fields with lags and leads are permitted.
For example,
VAR S=if(str(X[-1],1,2)=str(X,1,2))then(1)else(0) TO DATA1
gives S=1 when the 2 first characters of X are same in the previous
record and S=0 otherwise.
Trailing blanks in string concatenation:
In string expression of the form str(A)&str(B)&str(C) trailing blanks
are included.
To remove such blanks, `connector' `|' is used in place of `&'.
Thus if str(A)="AA ", str(B)="BBB ", str(C)="anything",
str(A)&str(B)&str(C)="AA BBB anything" but
str(A)|str(B)|sp&str(C)="AABBB anything" (sp denotes one blank).
Examples: (See, what are the effects of the VAR operations below.)
DATA TEST,A,B,N,M
AAAAAA AAAAAAAA AAAA AAAAAAAA A A AA
Code1 Code2 Year1 Code3 len D LagY
281037 AB/1967 1937 1967:AB 7 0
170667 A/1978 1967 1978:A 6 0 37
120659 ACD/1977 1959 1977:ACD 8 0 67
190939 D/1989 1939 1989:D 6 1 59
39
VAR str(Year1)="19"&str(Code1,5) TO TEST
VAR str(Code3)=str(Code2,pos1+1,4)&":"&str(Code2,1,pos1-1) TO TEST
pos1=pos(Code2,/)
VAR len=pos(Code2,sp)-1 TO TEST
sp (or space) is the notation for the 'space' character.
comma is the notation for ',' .
VAR D=if(str(Code2,1,1)="D")then(1)else(0) TO TEST / conditional statement
VAR str(LagY[+1])=str(Year1,3,2) TO TEST / lags and leads allowed
VAR str(var2)=split(var1,<len>,<char>)
splits a string in var1 so that spaces between 'words' are replaced
by <char> so that the length of each substring is at most <len>
except for 'words' longer that <len> bytes.
Example: VARSTR(str2)=split(var1,8,|) converts
var1="This is a long string" into form
var2="This is|a long|string|".
V = More information on VAR operation