<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Recentemente, un cliente mi ha chiesto come ottenere una tabella di codici postali a 9 cifre con valori di latitudine e longitudine che potrebbero essere importati in JMP per unire con una tabella di dati JMP esistente contenente codici postali a 9 cifre. Questa domanda era nuova per me, e ho avuto un suggerimento da qualcun altro che forse SAS PROC GEOCODE sarebbe stato utile. Tuttavia, sapevo che il cliente non era un programmatore SAS, quindi speravo di trovare un percorso felice che non includesse la necessità di imparare come programmare in SAS.
Ho controllato per la prima volta il componente aggiuntivo Geocoder di JMP, ma sembrava che Geocode fosse solo al livello di 5 cifre. Il cliente aveva già le posizioni X / Y lat / lon ma aveva bisogno di qualcosa di più granulare, da qui il desiderio delle cerniere a 9 cifre. Io dopo ha esaminato PROC GEOCODE e si è scoperto che il proc richiedeva due tabelle: la tabella dei dati e una tabella con le cerniere a 9 cifre collegate ai valori di latitudine e longitudine. Ma avevo già i codici di avviamento postale di cui avevo bisogno: se riuscivo a trovare la tabella degli indici, sembrava che non avrei avuto bisogno del proc per unire le tabelle, sebbene offrisse qualche corrispondenza sfocata che un join diretto non avrebbe.
Ho effettuato il check-in con il supporto tecnico di SAS e hanno affermato che la tabella di dati che hanno incluso i file zip di 9 cifre si trova su un collegamento questa pagina giù sotto il Zip + 4 sezione Geocoding. Y È necessario disporre di un ID profilo SAS per scaricare il file zip, che si ha già se si sta leggendo questo e si è membri della comunità JMP. In ogni caso, è libero di configurare un profilo SAS. Il file è dal 2006, quindi non è aggiornato, ma a in particolare, la versione attuale dei dati TIGER non include i dati zip + 4. La prossima sezione della pagina menziona una fonte a pagamento (dati Melissa) che fornisce più informazioni aggiornate e la tiene aggiornata a pagamento.
Una volta scaricato il file zip, puoi vedere che contiene un file readme, un file CSV (ZIP4.CSV) e un programma SAS. Ho pensato di importare il CSV direttamente in JMP a quel punto, ma è qui che ho trovato l'interstizio # 1: il file CSV mancava di intestazioni di colonna! Sono tornato al programma SAS e ho importato i dati che lo utilizzano, e le intestazioni delle colonne sono state aggiunte in modo da poter vedere cosa fossero. Tuttavia, il programma che ha aggiunto i nomi delle colonne sembrava riordinare le colonne, quindi è diventato un po 'un gioco di abbinamento per determinare quali colonne nel CSV corrispondevano alle colonne nominate nella tabella SAS.
Ora sono tornato su JMP per inserire il file SAS importato contenente le intestazioni delle colonne, e questo è il punto in cui mi sono imbattuto nell'impugnatura n. 2. Alcune delle cerniere a 5 cifre iniziarono con "00" o "0" e la colonna veniva considerata come dati numerici quando veniva importata da CSV in JMP, quindi gli 0 iniziali venivano rilasciati dalle cerniere al momento dell'importazione. Ho controllato le proprietà della colonna e sulla colonna c'era un set di formato Z5 SAS, ma ne ho parlato con Xan e ha confermato che JMP al momento non capiva il formato del codice postale.
Mentre avrei potuto risolvere questo problema con una colonna formula condizionale dopo il fatto, cambiando la colonna in carattere e aggiungendo 0, 1 o 2 zeri in base alla lunghezza di ogni zip, suggerì che la soluzione più veloce potrebbe essere quella di reimportare il CSV file usando la modalità di anteprima dell'importazione del testo di JMP, che mi permetterebbe sia di modificare il tipo di colonna in carattere sia di rinominare le colonne necessarie prima dell'importazione. Ho aperto il mio file SAS e ho determinato i nomi delle intestazioni delle colonne solo per le colonne di cui avevo bisogno e ho fatto proprio questo.
Per importare il file ZIP4.CSV da solo, sarà necessario fare clic File> Nuovo script in JMP, quindi incollare il testo sottostante in una finestra di script. Metti il cursore all'inizio della prima riga e fai clic sul pulsante Esegui script sulla barra degli strumenti. Puoi passare il mouse per trovare quel pulsante con un suggerimento, oppure fare clic con il tasto destro del mouse nella finestra dello script e scegliere Esegui script. Come indicato di seguito, è necessario puntare al percorso corretto sulla macchina per il file scaricato e decompresso dal sito Web di supporto SAS collegato in precedenza.
Nomi predefiniti qui ( 1 ) ;
// Sostituisci il percorso sottostante con il percorso del file CSV salvato sul tuo computer
zipdata = Aperto (
"C: \ \ ZIP4.csv" ,
colonne (
Colonna ( "CERNIERA LAMPO" , Personaggio , "Nominale" ) ,
Colonna ( "ZIP + 4" , Personaggio , "Nominale" ) ,
Colonna ( "C000003" , Personaggio , "Nominale" ) ,
Colonna ( "Città" , Personaggio , "Nominale" ) ,
Colonna ( "C000005" , Personaggio , "Nominale" ) ,
Colonna ( "C000006" , Personaggio , "Nominale" ) ,
Colonna ( "C000007" , Personaggio , "Nominale" ) ,
Colonna ( "C000008" , Numerico , "Continuo" , Formato ( "Migliore" , 10 )) ,
Colonna ( "C000009" , Numerico , "Continuo" , Formato ( "Migliore" , 10 )) ,
Colonna ( "C0000010" , Numerico , "Continuo" , Formato ( "Migliore" , 10 )) ,
Colonna ( "X" , Numerico , "Continuo" , Formato ( "Migliore" , 10 )) ,
Colonna ( "Y" , Numerico , "Continuo" , Formato ( "Migliore" , 10 )) ,
Colonna ( "C0000013" , Personaggio , "Nominale" ) ,
Colonna ( "C0000014" , Personaggio , "Nominale" )
) ,
Impostazioni di importazione (
Fine della linea (CRLF , CR , LF) ,
End Of Field (virgola , CSV ( 0 )) ,
Quotes Strip ( 1 ) ,
Usa Apostrofo come Virgolette ( 0 ) ,
Scansione intero file ( 1 ) ,
Tratta le colonne vuote come numeriche ( 0 ) ,
CompressNumericColumns ( 0 ) ,
CompressCharacterColumns ( 0 ) ,
CompressAllowListCheck ( 0 ) ,
etichette ( 0 ) ,
Inizio di nomi di colonna ( 1 ) ,
Data Avvia ( 1 ) ,
Linee da leggere ( "Tutti" ) ,
Regola di anno ( "20xx" )
)
) ;
// È possibile selezionare ed eliminare le colonne senza nome nella tabella: si tratta di dettagli relativi al Censimento di cui non penso sia realmente necessario. Se trovi che lo fai, fammi sapere.
Come accennato in precedenza, non ho seguito l'esercizio di abbinamento per ottenere tutti i nomi di colonna corretti per tutte le colonne in questo file perché non avevo bisogno degli attributi relativi al censimento, solo il codice postale, la città e X / Y coordinate corrispondenti a latitudine e longitudine. Se si ha accesso a SAS, è possibile eseguire uno script per importare il file in SAS per vedere tutti i nomi delle colonne e modificare questo script per denominare correttamente tutte le colonne generiche c000003, c000004 ecc. O se sono necessarie e non avere SAS, per favore aggiungi un commento qui e tornerò per completare quel lavoro.
Dopo aver eseguito lo script per generare la tabella e averlo salvato, puoi trascinare la X e la Y nelle zone di rilascio nel generatore di grafici per visualizzare le posizioni dei codici postali. Sono così densi da mostrare in gran parte la forma del paese!

La tabella importata è ~ 16,6 M righe e 14 colonne. Il mio tavolo finale era ancora mezzo concerto quando ho tagliato solo le 5 colonne di cui avevo bisogno.
Successivamente, sarà necessario unirsi a questa tabella con la tabella JMP esistente contenente zip a 9 cifre. Un fattore importante è determinare se il formato del codice postale corrisponde al formato della tabella importata, che ha il codice postale a 5 cifre e l'estensione a 4 cifre in colonne separate. Se anche la tua tabella di dati lo fa, dovresti essere bravo a farlo Tabelle> Iscriviti , scegliendo di unire le due tabelle, Abbinando colonne, e scegliendo le colonne giuste per abbinare entrambe le colonne.
Tuttavia, se hai bisogno di una colonna nel formato di XXXXX-XXXX perché questo è il formato in cui la tua tabella di dati ha i codici di avviamento postale, allora puoi fare quanto segue alla tabella che hai appena importato.
- Fare clic con il tasto destro sulla colonna vuota a destra del tavolo e scegliere Nuove colonne ...
- Nella finestra di dialogo che si apre, assegna un nome alla nuova colonna CAP CODICE e sotto Proprietà colonna pulldown, scegliere Formula . Questo apre l'editor di formule di JMP.
- Fai clic su ZIP nel selettore colonne sotto il pulldown Colonne tabella, quindi scegli Personaggio nella casella di selezione della colonna sotto la sezione Funzioni e scegliere concat dalla lista popup. Digita "-" nella casella vuota che si apre.
- Clic Personaggio> Concat ancora e con la nuova casella vuota selezionata, selezionare la colonna Zip + 4 dalla casella di selezione della colonna della tabella.
- Dovresti vedere una formula come questa:

Una volta che la tua formula assomiglia a quella sopra, fai clic su OK nell'editor di formule e di nuovo OK nella finestra di dialogo della colonna. Questo dovrebbe aggiungere una nuova colonna alla tua tabella chiamata ZIP CODE che contiene le cerniere nel formato 00601-2103. Puoi quindi unirti alla tabella dei dati originale contenente le cerniere in quel formato.
Le prime due righe nel file CSV sembrano essere state un po 'incasinate nell'importazione, ma non sono sicuro del motivo a meno che i problemi esistessero nel file CSV originale. Sono riparati facilmente.
Spero che questa informazione possa essere utile a qualcun altro che necessita di dati di codice postale a 9 cifre. Ancora una volta, non è la versione più recente di questi dati esistente, ma potrebbe essere sufficiente per alcune applicazioni. Se hai bisogno di una migliore corrispondenza sfocata dei dati dell'indirizzo o del codice postale e hai accesso a SAS, puoi anche consultare PROC GEOCODE.
PS Sono certo che ci sono modi migliori per farlo tramite scripting e integrazione con SAS, ma quando aiuto un cliente che non è uno scripter e non ha accesso a SAS, ho dovuto trovare un percorso solo per JMP e in gran parte interattivo .
jeff.perkinson