Пока что все предлагаемые в настоящее время решения дают сбой в случае множественных замен
q)t:100000 # flip (`pair`d1`d2`d3`d4`vol`adjustment)!(`pair1`pair2`pair3`pair4;("NC";"3/-0.09";"1/-0.09";"NC");("NC";"4/-0.09";"-1/-0.09";"NC");("NC";"2/-0.09";"1/0.09";"2/0.3");("NC";"4/-0.09";"0/-0.09";"NC");0 89.68 78.3 0;("0.1bp";"0.1bp";"0.1bp";"0.1bp"))
q)update adjustment:enlist"NO ADJ" from t where all(d1;d2;d3;d4)~\:\:"NC"
'length
[0] update adjustment:enlist"NO ADJ" from t where all(d1;d2;d3;d4)~\:\:"NC"
^
q)update adjustment:enlist"NO ADJ" from t where all (d1;d2;d3;d4) like\:"NC"
'length
[0] update adjustment:enlist"NO ADJ" from t where all (d1;d2;d3;d4) like\:"NC"
q)![`t;{(like;x;"NC")}each ((cols t) where (cols t) like "d*");0b;(enlist `adjustment)!enlist (enlist;"NO ADJ")]
'length
[0] ![`t;{(like;x;"NC")}each ((cols t) where (cols t) like "d*");0b;(enlist `adjustment)!enlist (enlist;"NO ADJ")]
^
Это потому, что не существует простого способа определить количество строк «NO ADJ» вам нужно подставить.
'length
[0] update adjustment:enlist "adfjkl" from t where i in 1 2 3
^
q)update adjustment:3#enlist "adfjkl" from t where i in 1 2 3
pair d1 d2 d3 d4 vol adjustment
---------------------------------------------------------------
pair1 "NC" "NC" "NC" "NC" 0 "0.1bp"
pair2 "3/-0.09" "4/-0.09" "2/-0.09" "4/-0.09" 89.68 "adfjkl"
pair3 "1/-0.09" "-1/-0.09" "1/0.09" "0/-0.09" 78.3 "adfjkl"
pair4 "NC" "NC" "2/0.3" "NC" 0 "adfjkl"
pair1 "NC" "NC" "NC" "NC" 0 "0.1bp"
Лучший способ справиться с этим типом векторной замены - через векторное условное
q)update adjustment:?[&/[{"NC" ~/:x} each (d1;d2;d3;d4)];(count adjustment)#enlist "NO ADJ";adjustment] from t
pair d1 d2 d3 d4 vol adjustment
---------------------------------------------------------------
pair1 "NC" "NC" "NC" "NC" 0 "NO ADJ"
pair2 "3/-0.09" "4/-0.09" "2/-0.09" "4/-0.09" 89.68 "0.1bp"
pair3 "1/-0.09" "-1/-0.09" "1/0.09" "0/-0.09" 78.3 "0.1bp"
pair4 "NC" "NC" "2/0.3" "NC" 0 "0.1bp"
pair1 "NC" "NC" "NC" "NC" 0 "NO ADJ"
Выполнение этой воли тоже вообще будет отлично.
Изучение моего условного выражения
?[&/[{"NC" ~/:x} each (d1;d2;d3;d4)];(count adjustment)#enlist "NO ADJ";adjustment]
В моем предложении where {"NC" ~/:x} each (d1;d2;d3;d4)
создает 4 векторных логических списка, затем я сворачиваю их с помощью &
(and) и операции сходимости , чтобы узнать, где выполняются все условия.
Два других компонента - мои заменяющие векторы, они должны быть равной длины . Это условие позволяет избежать ошибок двух других попыток, когда вы не можете узнать количество необходимых замен.