Combinez les comtés d'état aux régionsLe Kansas compte 105 comtés qui sont combinés en 16 régions de préparation sanitaire. Comment puis-je faire cela en utilisant le fichier US-County-Name.jmp et le fichier XY associé ?
Les 16 régions du Kansas sont définies au lien suivant : https://www.kdhe.ks.gov/ArchiveCenter/ViewFile/Item/1246
Toute aide serait appréciée.
GraphiqueRe : Combiner les comtés d'État aux régionsQuelqu'un peut avoir un moyen plus simple, mais j'ai fait des choses comme ça et je sais que cela fonctionnera bien que cela demande un certain effort.Tout d'abord, je téléchargerais cette table de région que vous avez liée, puis séparerais les comtés en utilisant la virgule comme délimiteur (j'utilise généralement Excel pour cette étape, bien que cela puisse être fait dans JMP).Ensuite, je restructurerais ce tableau en empilant les comtés de sorte qu'il y ait 2 colonnes, une avec la région et l'autre montrant les comtés associés à chaque région (mais comme une seule colonne).Ensuite, vous pouvez vous assurer que le fichier US-County-Name.jmp a le même format pour les noms de comté que le fichier que vous avez créé (comme l'ajout du mot "Comté" au nom du comté - assurez-vous qu'il correspond exactement à la façon dont le les noms de comtés apparaissent dans le fichier de carte).Attribuez ensuite le rôle de carte à la colonne County que vous avez créée, en la liant au fichier US-County-Name.jmp à l'aide de la colonne nommée correcte dans ce fichier.Étant donné que votre nouveau fichier aura une colonne pour la région, vous pouvez l'utiliser dans Graph Builder pour superposer ou colorer les régions sur la carte.
Je sais que cela demande beaucoup de travail, mais c'est la seule façon dont j'ai fait cela dans le passé.
Re : Combiner les comtés d'État aux régionsBonjour @jkeighley ,
Ci-dessous, j'ai du code qui nécessite un débogage, mais qui devrait être un point de départ solide. Y a-t-il d'autres scripteurs qui pourraient améliorer le script ci-dessous ?Je suis sûr qu'il y a beaucoup d'améliorations nécessaires!
- Ouvre US-County-Name.jmp & p reps pour une recherche ultérieure, en séparant l'état et le comté dans de nouvelles colonnes
- Télécharge et ouvre le PDF que vous avez lié ci-dessus, puis importe le tableau sur la première page
- Remarque : vérifiez toujours le script avant de l'exécuter sur votre machine locale ! Ce script télécharge un fichier PDF à partir d'Internet.Vérifiez la ligne 15, la chaîne d'URL dans l'argument URL()
- Assigns crée un tableau associatif (AA) de régions (clés) et de comtés (valeurs) dans la région <-- la boucle ne fonctionne pas
- Je débute dans les expressions régulières, donc l'expression regex est cassée
- La liste des comtés revient sous la forme d'une seule chaîne, que la regex est censée séparer
- Exemple de chaîne de comté : "Barton, McPherson, Pawnee, Rice, Saline, Stafford"
- Doit être une liste de chaînes : { "Barton", "McPherson", "Pawnee", "Rice", "Saline", "Stafford" }
- Dans US-County-Name.jmp...
- Utilise quelques boucles imbriquées pour trouver des lignes où State = KS et d'autres conditions
- Lorsqu'une ligne où State = KS, regarde le pays, puis trouve à quelle région il correspond en recherchant dans l'AA, puis en attribuant la région (clé) à laquelle le comté (valeur) est attribué
- Enregistre la région (clé) dans la colonne Région de la ligne
names default to here(1);
clear log();
/* This block opens & readies US-County-Name.jmp */
countylist = open( "C:/Program Files/SAS/JMP/17/Maps/US-County-Name.jmp" );
countylist << New column( "County", formula( Word( 1, :Full Name Short, " " ) ) );
countylist << New column( "Region", Character );
countylist << New column( "State", formula( Word( -1, :Full Name Short, " " ) ) );
/* This block DOWNLOADS & opens the downloaded PDF & imports first page table */
request = New HTTP Request(
URL(
"https://www.kdhe.ks.gov/ArchiveCenter/ViewFile/Item/1246"
),
Method( "Get" )
);
file = request << Download( "$TEMP/Kansas Health Preparedness Regions.pdf", "replace", "show_progress" );
dt = Open( file,
PDF Tables(
Table(
table name(
"Kansas Health Preparedness Regions and Map Page(1) Table(1)"
),
add rows( page( 1 ), Rect( 0.4789, 1.0156, 10.5211, 7.8894 ) )
)
)
);
// For some reason, dt imports as a 1 item list of data tables
// Reassigns dt to a "Table" data type for further processing
dt = dt[1];
// Deletes empty rows in imported PDF table
dt << Select where( Is Missing( :Region ) ) << Delete Rows;
// Starting AA for data storage
region = Associative array();
// Stores region / county list data in AA
for( i = 1, i <= N Rows( dt ), i++,
templist = {};
temphold = dt:Counties Included[i];
tempitems = N Items( words( dt:Counties Included[i], "," ) );
show(tempitems);
// Breaks apart country string into individual counties and adds them to templist
for( n = 1, n <= tempitems, n++,
iteration = eval( eval expr( expr( eval insert( "\^n^" ) ) ) );
// Fix me! This is broken
insert into( templist, regex( "^\!"(\w*),*\!"$", iteration ) );
);
// Save the list as the value pair (county list, list of strings) to the respective key
region[ dt:region[i] ] = templist
);
// The region & county list is now stored in an AA!
//print( region );
/* This block will use data in AA to assign region to respective county in US-County-Name.jmp */
for( k = 1, k <= N rows( countylist ), k++,
// Condition where state = Kansas
try( if( countylist:State[k] == "KS",
// Iterates through AA keys (regions)
for( m = 1, m <= N Items( kskeys ), m++,
// Creates list of counties within m region
tempvals = region[m];
// Checks if Count present, then assigns region to dt
if( contains( tempvals, countylist:County[k] ), // County is in m list
countylist:Region[k] = kskeys[m]
);
);
) ); // try --> if county not found in PDF stated counties, no region will be assigned
);
// Closes out pdf table, if needed
close( dt, "No Save" );
Re : Combiner les comtés d'État aux régions@jkeighley
J'ai le script ci-dessous pour mettre à jour avec succès les régions dans US-County-Name.jmp. Notez que le script ci-dessous n'enregistre pas ce fichier, ni ne modifie le fichier XY associé.
names default to here(1);
clear log();
/* This block opens & readies US-County-Name.jmp */
countylist = open( "C:/Program Files/SAS/JMP/17/Maps/US-County-Name.jmp" );
countylist << New column( "County", formula( Word( 1, :Full Name Short, " " ) ) );
countylist << New column( "Region", Character );
countylist << New column( "State", formula( Word( -1, :Full Name Short, " " ) ) );
/* This block opens the downloaded PDF */
// Opens downloaded PDF & imports the first table
request = New HTTP Request(
URL(
"https://www.kdhe.ks.gov/ArchiveCenter/ViewFile/Item/1246"
),
Method( "Get" )
);
file = request << Download( "$TEMP/Kansas Health Preparedness Regions.pdf", "replace", "show_progress" );
dt = Open( file,
PDF Tables(
Table(
table name(
"Kansas Health Preparedness Regions and Map Page(1) Table(1)"
),
add rows( page( 1 ), Rect( 0.4789, 1.0156, 10.5211, 7.8894 ) )
)
)
);
// For some reason, if the below command doesn't re-assign dt to the data table,
// dt isn't the correct data type for the operation to continue
dt = dt[1];
// Deletes empty rows in imported PDF table
dt << Select where( Is Missing( :Region ) ) << Delete Rows;
// Starting AA for data storage
region = Associative array();
// Stores region / county list data in AA
for( i = 1, i <= N Rows( dt ), i++,
// Save the list as the value pair (county list, list of strings) to the respective key
region[ dt:region[i] ] = words( dt:Counties Included[i], ", " );
);
// The region & county list is now stored in an AA!
//print( region );
kskeys = region << Get keys;
/* This block will use data in AA to assign region to respective county in US-County-Name.jmp */
for( k = 1, k <= N rows( countylist ), k++,
// Condition where state = Kansas
try( if( countylist:State[k] == "KS",
// Iterates through AA keys (regions)
for( m = 1, m <= N Items( kskeys ), m++,
// Checks if Count present, then assigns region to dt
if( contains( region[ kskeys[m] ], countylist:County[k] ), // County is in m list
countylist:Region[k] = kskeys[m]
);
);
) ); // try --> if county not found in PDF stated counties, no region will be assigned
);
// Closes out pdf table, if needed
close( dt, "No Save" );