向下迭代行你好,
我是 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 變數名是相同的。 請參閱防止列名和變數名衝突線上文件中的部分。
希望有幫助。