Как я уже сказал в своем комментарии, вы не сказали нам, что это было частью ado
файла. Иногда сообщения об ошибках, подобные сообщаемому вами, возникают из-за конфликтов между переменными с одинаковыми именами.
Сначала это ошибка:
. clear
. set obs 1
number of observations (_N) was 0, now 1
.
. generate P = 0
.
. program define MyProgram
1. matrix P = J(1,6,0)
2. noi matrix list P
3. noi di el(P,1,1)
4. end
.
. MyProgram
P[1,6]
c1 c2 c3 c4 c5 c6
r1 0 0 0 0 0 0
type mismatch
r(109);
Действительно, если вы избавитесь от переменной P
, она будет работать, как и ожидалось:
. drop P
.
. MyProgram
P[1,6]
c1 c2 c3 c4 c5 c6
r1 0 0 0 0 0 0
0
Однако внешность может быть обманчива. Как указано в руководстве Stata :
"... Матрица может иметь то же имя, что и переменная в наборе данных, и если это так, Stata может показаться запутанной при оценке выражения (exp).
Когда имена конфликтуют, Stata использует правило, которое всегда принимает интерпретацию переменных данных ... "
Таким образом, при оценке выражений необходимо переопределить это поведение, явно указав Stata, что он имеет дело с матрицей. Это можно сделать с помощью функции matrix()
.
В этом случае строка 3 в MyProgram
должна измениться на:
noi: di el(matrix(P),1,1)