如何循環遍歷 for 語句中的列名稱?您好,我正在嘗試創建一個新的公式列,它將循環遍歷前面的列,前面的列分為兩組,每組都有以兩個字符串之一開頭的列名稱。然後這些列標題以整數 0、1、2、... 到 22 結尾。請參閱隨附的我的代碼的 pdf 屏幕截圖,並讓我知道為什麼它不起作用。昨天之前沒有使用過 JMP,我猜測我可能在 IF 語句中的列名稱中錯誤地使用了“i”或“%i”。
提前致謝!
回复:如何在 for 語句中循環遍歷列名?Liz_s,是的,這些指的是列號。
從 JMP 主菜單中,選擇幫助 > 書籍 > 腳本指南,然後轉至第 439 頁(或附近)。 這是第 9 章中的一個部分數據表,第 1 節,使用數據表對象, 話題訪問數據值。 閱讀整個部分,了解訪問和分配數據值的替代方法。
評論:您的任務的關鍵是找到每行的哪個決策列包含“Matriculated”。 每行循環 22 次以上就是大量嵌套。 了解更多信息的關鍵是使用幫助 > 腳本索引 > 函數來了解 Contains。
Contains(列表|字符串,匹配字符串)返回找到它的第一個位置。 注意:Loc() 返回列表或矩陣中找到匹配值的所有位置。 了解 dt[row, c1::cn] (其中列 c1 到 cn 是字符)將返回表值的列表。Contains() 將找到位置 (k),因此這將是組織列的正確位置。
關鍵是“了解你的工具”如何訪問和分配並了解你的功能。
祝您 JMP 學習之旅順利。
回复:如何在 for 語句中循環遍歷列名?你好,
該腳本運行良好,感謝您幫助我解決了對 JMP 公式編輯器的不熟悉問題。當我開始嘗試編寫循環時,這段優雅的代碼更符合我的想法。最後一個問題,您能解釋一下您在索引聲明中選擇的數字 6 和 10 嗎?
我猜測索引號 6 和 10 是因為測試文件中兩種列類型各有 5 個,總共 10 列?那麼 6 開始決策列集,10 結束決策列?(決定避免猜測,只是問你。)
心存感激!
莉茲_S
回复:如何在 for 語句中循環遍歷列名?這是適用於預科數據表的公式,這只是 JSL 文本。
k = Contains( Current Data Table()[Row(), Index( 6, 10 )], "Matriculated" );
If( k > 0,
Column( "designation_organization_" || Char( k ) )[Row()],
"None"
);
回复:如何在 for 語句中循環遍歷列名?我嘗試的第一件事是將藍框公式複制並粘貼到新的列腳本窗口中。 它不會粘貼;就好像解決方案中藍色框中的信息是圖片或屏幕截圖。
是的,我確實知道如何雙擊公式框才能輸入腳本。 我仍然不知道如何將行索引和列索引添加到 Contain 語句中。 但再次感謝您之前的回复。回复:如何在 for 語句中循環遍歷列名?有時輸入多個語句、公式很痛苦,最好還是輸入。
當您雙擊公式時,它會打開一個腳本窗口。這可能需要一些練習。 也許複製使用列號的公式並將其粘貼到藍色框中,然後雙擊以打開腳本編輯器。
我希望這有幫助。
回复:如何在 for 語句中循環遍歷列名?嗨,gzmorgan0,
您為所附表格編寫的第一個腳本符合我的要求,而且非常出色!我今天就能在工作中完成我的項目。謝謝!但是,由於這是我使用 JMP 的第三天,我想了解如何編寫您使用 JMP 中的公式編輯器編寫的最後一個選項。當我在運行第一個腳本後嘗試在表中創建新列時,遇到了兩個問題:
1.) 我無法在兩個單獨的語句中使用列公式編輯器中的兩個獨立函數。 我從包含函數並添加了一個“;”在它之後。但當我點擊如果函數中,它自動嵌入了 Contains 語句。詭異的。我不想要包含嵌入其中如果或相反亦然。
2.)我沒有看到如何將 row() 和 Index(6,10) 添加到包含( 當前數據表 (),...^ 選項給了我一個新的逗號分隔的“部分”:包含(當前數據表() ,部分, “入學”)。您如何將行/列選項插入到您的包含公式編輯器中的函數?
我已經瀏覽了歡迎套件教程,但在新專欄中沒有看到有關腳本編寫和使用公式編輯器的足夠信息。您是否知道可以向初學者推薦的 Youtube 視頻?但如果您有時間的話,我也希望您能再次回复我。
非常感謝!
回复:如何在 for 語句中循環遍歷列名?有多種方法可以實現我認為您需要的功能。 首先,您需要了解引用列的 JMP 語法。例如,如果您想創建一個隨機選擇組織 1-5 的新列,則此處的列公式為
i = Random Integer(1,5);
Column( "designation_organization_" || Char( i ) )[Row()];
||是連接運算符,Char(i) 是字符串。 然後括號代表指定列中的行。
我附上了一張桌子。 我不知道你的桌子是什麼樣子,但也許這個腳本會有所幫助。
打開附表。然後運行這個腳本
dt=data table("matriculation");
cnmes = dt << get column names("string");
dcols = {}; //create a list of decision columns
for(i=1, i<=nitems(cnmes), i++,
if( contains(cnmes[i], "_decision_"), Insert into(dcols, cnmes[i]) )
);
//create a new column
matcol = dt << New Column("Major", Character);
//rowwise
for(i=1, i <= nrow(dt) , i++,
k = Contains(dt[i,dcols], "Matriculated"); <BR /> //dt[ i, dcols] is a list of values in the decision columns from row i<BR /> //contains returns the position in the list for "Matriculated"
matcol[i] = if(k>0, Column("designation_organization_" || char(k))[i], "None" );<BR /> //if k > 0, "Matriculated" was found, so assign to matcol the organization for the corresponding k
);請注意,JMP 允許使用列號。 這是一個腳本,用於附加表的新列,它使用列號

回复:如何在 for 語句中循環遍歷列名?您的 PDF 很難閱讀。22個欄目中只有1個欄目會被“錄取”嗎? 或者您想要幾個組織代碼?