Anzeige, Auswertung und Änderung ausgewählter Sätze einer Datei
dstbest.txt
oder dstbew.txt
(Alternativ kann man die csv-Ausgabedatei (falls diese nicht zu groß
ist) mit Excel auswerten)
Zuerst wählt man, welche Satznummern ausgewählt werden sollen.
Beispiele fur eine Datei mit 4711 Sätzen:
Satznummernauswahl | Bedeutung |
---|---|
1-50 |
Die ersten 50 Sätze |
1-* |
alle Sätze |
1-10;1001-1010;2001-2010;4001-4010 |
4 Stichproben mit je 10 Sätzen |
1-5000 |
Alle Sätze |
4001-* |
Die letzten 11 Sätze |
Mit der Satzinhaltsauswahl kann man die uber Satznummern ausgewählten Sätze nach inhaltlichen Kriterien weiter reduzieren, und zusätzliche Werte berechnen; z.B.:
Satzinhaltsauswahl | Bedeutung |
---|---|
RN1 < 20 |
RN1 kleiner als 20 (fuhrende Nullen unerheblich) |
RN1 eq '0031' |
RN1 gleich 0031 (fuhrende Nullen wichtig) |
substr(R02,3,2) eq '78' |
An Position 4 und 5 des Felds R02 muss '78' stehen (substr(name, pos, anz) zählt Postion pos ab 0 und gibt dann Anzahl Zeichen an) |
(RN1 < 10) and ($n < 100) |
RN1 kleiner als 10 aber höchstens 100 Ausgabesätze |
FIL210 = (B03==2 and B05==4); 1 |
Ändere Feld FIL201 in Kennung für Staatsangehörigkeitswechsel und gib alle Sätze aus. (mehrere Anweisungen werden durch ";" getrennt, die letzte Anweisung dient zur Auswahl der Sätzte; 1 bedeutet "Auswahl ist immer wahr".) |
RN1 -= 10; RN1 > 0 |
Verringere Feld RN1 um 10 und gib Satz aus, falls RN1 größer Null ist. |
RN1 = sprintf '%04d', RN1 - 10; RN1 > 0 |
Verringere Feld RN1 spaltengerecht für dst-Ausgabe um 10 und gib Satz aus, falls RN1 größer Null ist. |
NEUB = ' '; 1 |
Lösche alle Felder NEUB |
Diese Ausdrucke können dann zu komplizierten Ausdrucken kombiniert werden, z.B. Kennung für Lebendgeburt:
B03==1 and B04==1 and B07==1
oder noch ein wenig umfangreicher:
Erzeuge neue Ausgabevariable HUGO
BEGIN {
# Dieser Abschnitt wird einmal am Anfang ausgefuhrt
print {$HTM}
'<h3>Vorbereitungen fur Ausgabe Bestand</h3>',
"<p>Einrichtung Zusatzspalte HUGO (Feldlänge 4, Verschlüsselungsart I)</p>";
push @{$sb}, [0,4,'HUGO','I']; # ergänze Satzbeschreibung
};
# Dieser Abschnitt wird fur jeden Satz ausgefuhrt:
HUGO = RN1 - 1; # besetzte Feld HUGO
1; # wähle jeden Satz aus
In eine dst-Datei muss die Ausgabe spaltengerecht erfolgen:
HUGO = sprintf '%04d', RN1-1; # 4-stellig mit führenden Nullen 1; # wähle jeden Satz aus
Beispiele fur die Überprufung der Ergebnisse von HHPROG:
Wird SPw,15 aus Spezifikation B1.1 richtig berechnet ?
Satznummern | 1-* |
---|---|
Satzinhalt | P02==2 and A01==15 |
Wird PDO aus Spezifikation B1.0 richtig berechnet ?
Starten Quotenberechnung mit "Ausgabe Mikro-Merkmale = 2 oder 3"Satznummern | 1-100 (oder beliebig andere Stichprobe) |
---|---|
Satzinhalt | (leer) |
Wird SPKm,12 aus Spezifikation B1.1 richtig berechnet ?
Satznummern | 1-* |
---|---|
Satzinhalt | PDO==1 and P02==1 and A01==12 |
Für alle Ableitungen von Makrodaten gilt
Satznummern | 1-* |
---|
# Ausgabekann leer bleiben (entspricht default
END{pdump($HTM,$bb);};
, oder wird ersetzt durch
# Ausgabe im Protokoll im csv-Format END{phtml($HTM,$bb);}; # Ausgabe in Datei name_2015.csv mit Spaltenüberschriften END{pcsv($HTM,$bb,'name_2015.csv','#Gebiet;Geschlecht;Alter;Anzahl');};
# Alterspyramide $bb->{P02}{A01}++; # Ausgabe # bestand mit # substr(R02,0,2) wählt 2 signifikante Stellen von R02 aus # bevgrp(P05) wählt erste Staatsangehörigkeit 0: deutsch, sonst: nicht deutsch # altgrp(A01[,100,'%02d']) wählt Altersgruppe 00, 01, ..., 98, 99 und mehr $bb->{substr(R02,0,2)}{bevgrp(P05)}{P02}{altgrp(A01)}++ if W01==1; # Ausgabe # dsg auf Basis ANSTI (alternativ ANSTE) $bb->{substr(R02,0,2)}{bevgrp(P05)}{P02}{altgrp(A01)}++ if ANSTI != 1; # Ausgabe
# geburt $bb->{substr(R02,0,2)}{bevgrp(G02)}{G01}++ if B03==1 and B04==1 and B07==1; # Ausgabe # baby $bb->{substr(R02,0,2)}{bevgrp(P05)}{P02}{0}++ if B03==1 and B04==1 and B07==1; # Ausgabe # sterb mit 3-stelliger Altersgruppe $bb->{substr(R02,0,2)}{bevgrp(P05)}{P02}{A01}++ if B03==2 and B04==2 and B07==1; # Ausgabe # strom mit P05 als Bevölkerungsgruppe und 3-stelliger Altersgruppe $bb->{substr(R02,0,2)}{substr(RQZ,0,2)}{P05}{P02}{A01}++ if B03==2 and B04==4 and B07==1; # Ausgabe