從唯一選定的行和行號創建關聯數組大家好,
我有一個表,其中我選擇了主題是科學或數學的行(使用 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);