6  Weitere macro & matrix Funktionen

6.1 capture

cap drop S01 zpalter
d S0? zp*

6.2 Macro extended functions for parsing

local wanted : di _dup(10) "oo "
local wanted : di _dup(10) "oo "
dis "`wanted'"

local wanted : di "{dup 10:99 }"
oo oo oo oo oo oo oo oo oo oo 

6.3 weitere matrix-Befehle

Wir können auch Rechnungen einfügen:

matrix X1 = (1+1, 2*3/4 \ 5/2, 3)
mat l X1 
X1[2,2]
     c1   c2
r1    2  1.5
r2  2.5    3

6.3.1 Teilmatrizen

mat X1 = (1,2,3,4,5 \ 6,7,8,9,10 \ 0,-1,-2,-3,-5 \ -6,-7,-8,-9,-10)
mat l X1
X1[4,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10

Wir können aus diesen Matrizen auch Teilbereiche auswählen:

matrix newmat = oldmat[Zeile(nbereich), Spalte(nbereich)]

Zeilenbereich und Spaltenbereich können einzelne Zahlen oder Bereiche mit durch zwei Punkte getrennten Start- und Endpositionen sein.

Matrix B erstellen, welche die Zeile 2-4 und die Spalte 1-5 von X1 enthält:

matrix B = X1[2..4,1..5]
mat l B
mat l X1
B[3,5]
     c1   c2   c3   c4   c5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10


X1[4,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10

Um alle Zeilen nach der zweiten Zeile zu übernehmen, verwenden wir drei Punkte:

matrix C = X1[2...,1..5]
mat l C
mat l X1
C[3,5]
     c1   c2   c3   c4   c5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10


X1[4,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10

6.3.2 Spalten/Zeilen auswählen

B1 enthält Spalte 1 und 3 aus X1:

mat B1 = X1[1...,1],X1[1...,3]
mat l B1
mat l X1
B1[4,2]
    c1  c3
r1   1   3
r2   6   8
r3   0  -2
r4  -6  -8


X1[4,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10

B2 enthält Zeile 1 und 3 aus X1:

mat B2 = X1[1,1...] \ X1[4,1...]
mat l B2
mat l X1
B2[2,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r4   -6   -7   -8   -9  -10


X1[4,5]
     c1   c2   c3   c4   c5
r1    1    2    3    4    5
r2    6    7    8    9   10
r3    0   -1   -2   -3   -5
r4   -6   -7   -8   -9  -10

6.3.3 Namensbasierte Auswahl

Hier helfen rownumb und colnumb

mat X1 = (1,2,3 \ 8,9,10 )
mat colname X1 = var1 var2 var3
mat rowname X1 = set1 set2

mat X2 = X1[rownumb(X1,"set1"),1...]
mat l X2
X2[1,3]
      var1  var2  var3
set1     1     2     3
mat X3 = X1[1...,colnumb(X1,"var2")]
mat l X3
X3[2,1]
      var2
set1     2
set2     9