从唯一选定的行和行号创建关联数组大家好,
我有一个表,其中我选择了主题是科学或数学的行(使用 select where 函数)。 现在我想创建关联数组,它存储所有选定的行号以及特定列的唯一条目。
之后,我想为关联数组的所有键启动一个循环。 它将每个值的行从 key[i] 子集到 Key[i+1] 。
例如:
| 行号 | 学生 | 顺序 | 主题 |
| 1 | A | 1 | 经济学 |
| 2 | A | 2 | 科学 |
| 3 | A | 4 | 物理 |
| 4 | A | 5 | 数学 |
| 5 | A | 2 | 科学 |
| 6 | A | 4 | 化学 |
| 7 | A | 6 | 科学 |
| 8 | A | 2 | 数学 |
| 9 | A | 1 | 社会的 |
*蓝色的行,我使用选择位置功能进行选择。
- 我想创建存储关联数组的变量:[“科学”=> {2,5,7}],“数学”=> {4,8}]。
- 然后我想为两个键创建一个循环,这将子集化并生成 3 个表。
- 表 1:从第 2 行到第 5 行
- 表 2:从第 5 行到第 7 行
- 表 3:从第 4 行到第 8 行
请帮忙,我该如何解决。
谢谢 :)
回复:根据唯一选定的行和行号创建关联数组要获取我认为您想要的子集表,请修改 Ian 代码的最后部分,使其显示如下。 具体来说,将(新的)j 索引 for 循环嵌套在 Ian 的 i 索引 for 循环中。
干杯,
布雷迪
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
for(j = 1, j<=nitems(found_rows)-1, j++,
dt << subset(rows(found_Rows[j] :: found_Rows[j+1]));
)
);
show(subject_aa);
回复:根据唯一选定的行和行号创建关联数组@pmroz已经完成了大部分工作,还可以添加:
NamesDefaultToHere(1);
dt = New Table( "Subjects",
Add Rows( 9 ),
New Column( "Student",
Character( 16 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} )
),
New Column( "Sequence",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] )
),
New Column( "Subject",
Character( 16 ),
"Nominal",
Set Values(
{"Economics", "Science", "Physics", "Math", "Science", "Chemistry", "Science", "Math", "Social"}
)
)
);
// Make any row selection (in this case, the 'blue' rows)
dt << selectRows({2, 4, 5, 7, 8 });
// Get key list from the current row selection
subjectVals = Column(dt, "Subject")[dt << getSelectedRows];
key_list = AssociativeArray(subjectVals) << getKeys;
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);
右键单击编辑器中的 JSL 关键字并执行“帮助脚本索引”以获取更多信息。
使用您的示例,一旦您拥有关联数组,您所说的这些表的规范对我来说就不清楚了。
回复:根据唯一选定的行和行号创建关联数组@pmroz感谢回复。
我的数据集非常大,使用这种方法可能需要更多时间。
另外,我的 key_list 不是固定的,它取决于条件是否包含特定文本。回复:根据唯一选定的行和行号创建关联数组这段代码应该可以帮助您入门。
dt = New Table( "Subjects", Add Rows( 9 ),
New Column( "Student", Character( 16 ), "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} ) ),
New Column( "Sequence", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] ) ),
New Column( "Subject", Character( 16 ), "Nominal",
Set Values( {"Economics", "Science", "Physics", "Math", "Science", "Chemistry",
"Science", "Math", "Social"} ) )
);
key_list = {"Science", "Math"};
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);