向下迭代行你好,
我是 JMP/JSL 的新手,但有 Java 经验,目前正在编写一个程序,该程序需要遍历一列地址数据并检查该地址是否已在系统中;如果是,它应该用纬度和经度值填充新列。 我正在使用关联数组,这就是我到目前为止所拥有的:
NamesDefaultToHere(1); //所有变量都是本地的
rawData = Open("Kevin-PriceAnalysis-DO Basis US thru April.jmp");
当前数据表(rawData); //当前数据表设置为医院列表
地址 = 列(原始数据,“完整地址”);
dt_latMap = 关联数组(地址,原始数据:纬度); //将唯一的完整地址映射到纬度
dt_longMap = 关联数组(地址,原始数据:经度); //将唯一的完整地址映射到经度
dt_coord = new Table("坐标",
新列(“Lat”,数字,连续,格式(“Lat DDD”,24, 14)),
新列(“长”,数字,连续,格式(“长 DDD”,24、14))
); //新建坐标数据表(空)
For(i = 1, i <= N Rows(rawData), i++, //遍历原始数据,检查是否包含在地图中
if(Contains(dt_latMap, address[i]), //如果是则更新坐标
dt_coord:Lat = dt_latMap<<获取值(地址[i]);
dt_coord:Long = dt_longMap<<获取值(地址[i]),
!Contains(dt_latMap, address[i]), //如果没有,继续循环
继续();
);
);
我不断收到“无法为 'Lat' 设置值,因为行号 (-1) 无效。 我认为这可能是列命名的问题,但我尝试更改列的名称。 任何帮助将不胜感激! 谢谢!
回复:向下迭代行非常感谢!
回复:向下迭代行我刚刚使用 San Francisco Crime.jmp 表逐步浏览了您的代码。 抱歉,我之前没有注意到这一点,但 dt_coord 表没有行。 当 If() 中满足条件时,首先添加一行。 然后使用该行号作为列引用的下标。
Contains( dt_latMap, address[i] ), //if yes updates coordinates
dt_coord << Add Rows( 1 );
r = N Rows( dt_coord );
dt_coord:Lat[r] = dt_latMap << Get Value( address[i] );
dt_coord:Long[r] = dt_longMap << Get Value( address[i] );,
回复:向下迭代行嗨,温迪,
我尝试更改所有列名和变量名,但仍然遇到同样的问题。 我已经更改了填充关联数组的代码,如下所示:
For(j = 1, j<= N 行(rawData),j++,
如果(!包含(dt_latMap,地址[j]),
dt_latMap << 插入(地址[j],原始数据:纬度[j]),
!包含(dt_LongMap,address[j]),
dt_longMap << 插入(地址[j],rawData:经度[j]);
)
);
但我仍然得到无效的行号,这次说索引是 0。 我忘了在某处设置当前行吗? 谢谢!
回复:向下迭代行你好,
听起来您有一个相同的列名和 JSL 变量名。 见防止列名和变量名冲突在线文档中的部分。
希望这会有所帮助。