如何循环遍历 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个栏目会被“录取”吗? 或者您想要几个组织代码?