您好,我可以提取一个格式非常简单的 SQL 表。其中一列具有唯一 ID (UID),另一列具有列标题,第三列具有 UID。我还有另一个表,其中某些单元格具有相同的 UID。我想将第一个表(“UID”)中的值插入到第二个新表(“新”)。
Tabulate 是一款完美的工具,可以对列标题进行排序并给出行数,但由于 UID 列包含字符串和数字数据,我无法通过 tabulate 直接用值填充表格,因此我在 tabulate 工具中为值输入了 UID。这至少让我能够关联哪个值属于哪里。
如果制表可以直接填充实际值(不需要统计数据)而不是需要在表之间搜索 UID,那么这将是理想的。
编写伪代码很容易显示需要做什么,但是 JSL 却不尽如人意。有人能帮忙吗?

for( i = 1, i <= N Cols( data table( "New" ) ), i++, // col-by-col
for( j = 1, j <= N rows( data table( "New" ) ), j++, // row-by-row
if( isempty( column( data table( "New" ), i)[j] ), continue(), // if cell empty, move to next row
id_val = column( data table( "New" ), i)[j] &
id_loc = data table( "UID" ) << Get rows where( :UID == id_val) &
data table( "New" ):eval( column( data table( "New" ))[j] = data table( "UID" ):UID[ id_loc[1] ]
);
);
);
感谢您的时间!
你好@StarfruitBob
也许以下内容对您有用。
Names Default To Here( 1 );
dtnew = New Table( "new",
Add Rows( 3 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "4", ""} ) ),
New Column( "Column 2", Character, "Nominal", Set Values( {"", "3", ""} ) ),
New Column( "Column 3", Character, "Nominal", Set Values( {"", "5", "2"} ) )
);
dtuid = New Table( "uid",
Add Rows( 5 ),
New Column( "UID", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4, 5] ) ),
New Column( "Val", Character, "Nominal", Set Values( {"apple", "12.3", "987", "abc", "3"} ) )
);
for (i=1, i<=ncols(dtnew), i++,
for ( ii=1, ii <=nrows (dtnew), ii++,
if ( Column (dtnew ,i)[ii] == "", continue (),
abc= num( ( (Column (dtnew ,i)[ii])));
Column (dtnew ,i)[ii] = char (dtuid:val[abc]);
)));
脚本感觉很不自然。
让我们知道它是否适用于您的应用程序。
你好@ron_horne ,
Column (dtnew ,i)[ii] = char (dtuid:val[abc])
上面的行没有将在 dt:New 的单元格中找到的 UUID 链接到在 :UID 中具有相应值的 dt:UID 行,然后使用该行号保存到 dt:New 中的相应单元格中。是否有一个简单的命令可以找到 << Get rows where( :UID == abc ) 以外的行号? 如果是这样,我想我可以根据您上面的回答来完成此脚本。
有没有办法直接在单元格的实际值中制作表格,而不管数据类型和建模,没有统计数据?
解决了! 我没有尝试使用 JMP 来执行此操作,而是请某人修改 SQL 查询来执行此操作,这要容易得多。