向下迭代行你好,
我是 JMP/JSL 新手,但有 Java 经验,目前正在编写一个程序,需要迭代一列地址数据并检查该地址是否已在系统中;如果是,它应该使用纬度和经度值填充新列。 我正在使用关联数组,这就是我到目前为止所拥有的:
名称默认到这里(1); //所有变量都是局部的
rawData = Open("Kevin-PriceAnalysis-DO Basis US thru April.jmp");
当前数据表(rawData); //当前数据表设置为医院列表
地址 = Column(rawData, "完整地址");
dt_latMap = 关联数组(地址, rawData:纬度); //将唯一的完整地址映射到纬度
dt_longMap = 关联数组(地址, rawData:经度); //将唯一的完整地址映射到经度
dt_coord = new Table("坐标",
新列("Lat", 数字, 连续, 格式("Lat DDD", 24, 14)),
新列("长", 数字, 连续, 格式("长 DDD", 24, 14))
); //新的坐标数据表(空)
For(i = 1, i <= N Rows(rawData), i++, //遍历原始数据,检查是否包含在map中
If(Contains(dt_latMap, address[i]), //如果是则更新坐标
dt_coord:Lat = dt_latMap<<获取值(地址[i]);
dt_coord:Long = dt_longMap<<获取值(地址[i]),
!Contains(dt_latMap, address[i]), //如果没有,继续循环
继续();
);
);
我不断收到“无法设置‘纬度’的值,因为行号 (-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++,
If(!Contains(dt_latMap, 地址[j]),
dt_latMap << 插入(地址[j], rawData:纬度[j]),
!包含(dt_LongMap,地址[j]),
dt_longMap << 插入(地址[j], rawData:经度[j]);
)
);
但我仍然得到无效的行号,这次说索引是 0。 我是否忘记在某处设置当前行? 谢谢!
回复:向下迭代行你好,
听起来您的列名和 JSL 变量名是相同的。 请参阅防止列名和变量名冲突在线文档中的部分。
希望这有帮助。