2014-09-05 33 views
1

所以定義了一個名爲「Z」矩陣,並顯示它的第一個元素很好地工作:Stata阻塞名爲「P」的矩陣嗎?

. matrix Z = J(1,3,0) 
. matrix list Z 

Z[1,3] 
    c1 c2 c3 
r1 0 0 0 

. di el(Z,1,1) 
0 

在另一方面乾脆改名爲「P」打破了el()功能:

. matrix P = J(1,3,0) 
. matrix list P 

P[1,3] 
    c1 c2 c3 
r1 0 0 0 

. di el(P,1,1) 
type mismatch 

爲什麼?

更新1:

雖然發現上述行爲(在調試會話期間),I從命令行和從ADO文件中再生,然後用cleardrop program _allmatrix drop _all結算後的Stata再現。但是,重新啓動Stata後,我無法重現此行爲。

更新2:

至少我以爲我用clear ...進一步的調查表明,我可以重現在重新啓動時的行爲,如果我開始在「P」用名稱的變量記憶。例如(起始塔塔鮮):

. matrix P = J(1,3,0) 
. matrix list P 
. di el(P,1,1) 
0 

. set obs 100 
obs was 0, now 100 
. gen Parsnips = uniform() 
(100 real changes made) 
. di el(P,1,1) 
type mismatch 
. rename Parsnips parsnips 
. di el(P,1,1) 
0 

回答

1

事實上,在我的第二次更新指出的情況下,Stata確實與命名歧義相沖突。我剛剛從他們的技術支持獲得的反饋,使用di el(matrix(P),1,1)明確提及P作爲矩陣可以解決此問題。

+1

這對我來說確實是新鮮事物。我得到了和你一樣的結果。或者,您可以使用'di P [1,1]'來顯示元素。我已經用你的例子測試了它,沒有任何問題。 – 2014-09-05 23:07:04

+0

+1哦,是的......這是Stata,而不是R或Python,所以我忘記了訂閱(我通常認爲Stata非常努力地讓事情變得比其他語言更晦澀/更具挑戰性:)。 – Alexis 2014-09-05 23:58:01

1

這對我工作得很好:

matrix Z = J(1,3,0) 
matrix list Z 

di el(Z,1,1) 

matrix P = J(1,3,0) 
matrix list P 

di el(P,1,1) 

你忽略的信息?

+0

請參閱我的更新。還是很困惑。 – Alexis 2014-09-05 20:49:09

+0

很難說。我的猜測是你在'el()'中使用了一個宏,並且這個宏一旦被引用就會導致像'di el(P,「1」,「1」)這樣的東西。那會給你報告的那種錯誤。 – 2014-09-05 20:58:12

+0

我也這麼認爲,但我使用上面給出的示例語法來複制行爲。我即將再次編輯我的文章,並可能開始提供答案。 – Alexis 2014-09-05 21:04:04