<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />最近,一位客戶問我如何獲得一張包含緯度和經度值的9位郵政編碼表,這些郵政編碼可以導入JMP以與包含9位郵政編碼的現有JMP數據表合併。這個問題對我來說是新的,我向其他人提出了一個建議,也許SAS PROC GEOCODE會有所幫助。但是,我知道客戶不是SAS程序員,所以我希望找到一條不需要學習如何在SAS編程的快樂路徑。
我首先檢查了JMP Geocoder加載項,但它似乎只有Geocode到5位數的壓縮級別。客戶已經擁有那些X / Y lat / lon位置,但需要更精細的東西,因此需要9位拉鍊。我接下來調查了PROC GEOCODE,結果發現proc需要兩個表 - 你的數據表和一個與緯度和經度值相關的9位拉鍊表。但是我已經擁有了我需要的郵政編碼 - 如果我能找到索引表,似乎我不需要proc來加入表格,雖然它確實提供了一些模糊匹配,直接連接不會。
我檢查了SAS技術支持,他們說他們擁有的包含9位數字zip文件的數據表可以在鏈接上找到這一頁在...之下 Zip + 4地理編碼部分。ÿ 你需要一個SAS配置文件ID才能下載你已經擁有的zip文件,如果你正在閱讀它並且是JMP社區的成員。無論如何,可以自由設置SAS配置文件。該文件是從2006年開始,它已經過時了,但是顯然,當前版本的TIGER數據不包括zip + 4數據。頁面上的下一部分提到付費來源(Melissa Data),它提供更多當前信息並保持更新費用。
下載zip文件後,您可以看到它包含自述文件,CSV文件(ZIP4.CSV)和SAS程序。我以為我會在那時直接將CSV導入JMP,但這是我遇到障礙#1:CSV文件缺少列標題!我回到SAS程序並使用它導入數據,並添加了列標題,以便我可以看到它們是什麼。但是,添加列名的程序似乎也對列重新排序,因此它確定了一些匹配遊戲,以確定CSV中哪些列與SAS表中的命名列匹配。
現在我回到JMP來引入包含列標題的導入SAS文件,這就是我遇到障礙#2的地方。一些5位數的拉鍊以“00”或“0”開頭,當從CSV導入JMP時,該列被視為數字數據,因此在導入時從拉鍊中刪除了前導0。我檢查了列屬性,並且列上有一個Z5 SAS格式設置,但我與XO談過這個問題,他確認JMP目前不了解該郵政編碼格式。
雖然我可以通過將列更改為字符並根據每個zip的長度添加0,1或2個零來修復此條件公式列,但他建議最快的解決方案可能是重新導入CSV使用JMP的文本導入預覽模式的文件,這將允許我將列類型更改為字符並在導入之前重命名我需要的列。我打開了我的SAS文件並確定了我需要的列的列標題名稱,並且就是這樣做的。
要自己導入ZIP4.CSV文件,您需要點擊文件>新腳本在JMP中,然後將下面的文本粘貼到腳本窗口中。將光標放在第一行的開頭,然後單擊工具欄上的“運行腳本”按鈕。 您可以懸停以使用工具提示找到該按鈕,或者在腳本窗口中右鍵單擊並選擇“運行腳本”。如下所述,您需要在計算機上指向您下載的文件的正確路徑,並從上面鏈接的SAS支持網站解壓縮。
名稱默認為此處 ( 1 ) ;
//將以下路徑替換為計算機上保存的CSV文件的路徑
zipdata = 打開 (
“C:\ <您的文件夾位置> \ ZIP4.csv” ,
列(
柱 ( “壓縮” ,字符 , “標稱” ) ,
柱 ( “ZIP + 4” ,字符 , “標稱” ) ,
柱 ( “c000003” ,字符 , “標稱” ) ,
柱 ( “市” ,字符 , “標稱” ) ,
柱 ( “c000005” ,字符 , “標稱” ) ,
柱 ( “c000006” ,字符 , “標稱” ) ,
柱 ( “c000007” ,字符 , “標稱” ) ,
柱 ( “c000008” ,數字 , “連續” ,格式 ( “最好” , 10 )) ,
柱 ( “c000009” ,數字 , “連續” ,格式 ( “最好” , 10 )) ,
柱 ( “c0000010” ,數字 , “連續” ,格式 ( “最好” , 10 )) ,
柱 ( “X” ,數字 , “連續” ,格式 ( “最好” , 10 )) ,
柱 ( “Y” ,數字 , “連續” ,格式 ( “最好” , 10 )) ,
柱 ( “c0000013” ,字符 , “標稱” ) ,
柱 ( “c0000014” ,字符 , “標稱” )
) ,
導入設置(
行尾(CRLF , CR ,如果 ) ,
結束場(逗號 , CSV( 0 )) ,
地帶行情( 1 ) ,
使用撇號作為引號( 0 ) ,
掃描整個文件( 1 ) ,
將空列視為數字( 0 ) ,
CompressNumericColumns( 0 ) ,
CompressCharacterColumns( 0 ) ,
CompressAllowListCheck( 0 ) ,
標籤( 0 ) ,
列名稱開始( 1 ) ,
數據開始( 1 ) ,
要閱讀的行( “所有” ) ,
年份規則( “20XX” )
)
) ;
//您可以選擇並刪除表格中未命名的列 - 它們是我認為您不需要的人口普查相關詳細信息。 如果您發現了,請告訴我。
正如我上面提到的,我沒有通過匹配練習來獲取此文件中所有列的所有正確列名,因為我不需要與人口普查相關的屬性,只需要郵政編碼,城市和X / Y對應於緯度和經度的坐標。如果您可以訪問SAS,則可以運行腳本將文件導入SAS以查看所有列名稱並調整此腳本以正確命名所有通用c000003,c000004等列,或者如果您需要這些列而不是有SAS,請在這裡添加評論,我會回去完成這項工作。
運行腳本以生成表並保存後,可以將X和Y拖動到圖形構建器中的放置區域以查看郵政編碼的位置。 他們是如此密集,以至於他們在很大程度上顯示了這個國家的形狀!

導入的表是~16.6 M行和14列。我的決賽桌在裁剪到我需要的5列時仍然是半場演出。
接下來,您需要將此表與現有的包含9位數拉鍊的JMP表連接在一起。一個重要因素是確定您的郵政編碼格式是否與導入表格的格式相匹配,該表格在單獨的列中具有5位數的郵政編碼和4位數的擴展名。如果您的數據表也是如此,那麼您應該做得很好表>加入 ,選擇加入兩個表,按匹配列,並選擇正確的列以匹配兩列。
但是,如果您需要格式為XXXXX-XXXX的列,因為這是您的數據表中包含郵政編碼的格式,那麼您可以對剛剛導入的表執行以下操作。
- 右鍵單擊表右側的空白列,然後選擇新欄目......
- 在彈出的對話框中,將新列命名為ZIP CODE,然後在列屬性下拉,選擇式 。這將打開JMP的公式編輯器。
- 單擊Table Columns下拉列下的列選擇器中的ZIP,然後選擇字符在“功能”部分下的列選擇框中選擇 CONCAT 從彈出列表中。 在打開的空框中鍵入“ - ”。
- 點擊人物>康卡特再次選擇新的空白框,從表格列選擇框中選擇Zip + 4列。
- 你應該看到這樣的公式:

一旦您的公式如上所示,請在公式編輯器中單擊“確定”,然後在列對話框中再次單擊“確定”。 這應該在您的表中添加一個名為ZIP CODE的新列,其中包含格式為00601-2103的拉鍊。然後,您可以加入包含該格式的拉鍊的原始數據表。
CSV文件中的前兩行似乎在導入中有點亂,但我不確定為什麼除非原始CSV文件中存在問題。它們很容易修復。
我希望這些信息可能對需要9位郵政編碼數據的其他人有所幫助。 同樣,它不是這個數據的最新版本,但對某些應用程序可能已經足夠了。如果您需要更好的模糊匹配地址或郵政編碼數據,並且您可以訪問SAS,您也可以查看PROC GEOCODE。
PS我確信有更好的方法可以通過腳本和SAS集成來實現這一點,但是當幫助不是腳本編寫者並且無法訪問SAS的客戶時,我必須找到一個僅限JMP且主要是交互式的路由。
jeff.perkinson