Frage

Ich habe unten die folgende Datei in der Art und Weise formatiert dargestellt -

 DATA THROUGH 2001  YRS JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANN
BIRMINGHAM  AL  58  8.1 8.7 9.0 8.2 6.8 6.0 5.7 5.4 6.3 6.2 7.2 7.7 7.1
HUNTSVILLE  AL  34  9.1 9.4 9.8 9.2 7.9 6.9 6.1 5.8 6.7 7.3 8.1 9.0 7.9
MOBILE  AL  53  10.1    10.3    10.7    10.1    8.7 7.5 6.9 6.7 7.7 8.0 8.9 9.6 8.8
MONTGOMERY  AL  57  7.7 8.2 8.3 7.3 6.1 5.8 5.7 5.2 5.9 5.7 6.5 7.1 6.6
ANCHORAGE   AK  48  6.4 6.8 7.1 7.3 8.5 8.4 7.3 6.9 6.7 6.7 6.4 6.3 7.1
ANNETTE AK  37  11.7    11.9    10.6    10.7    9.0 8.5 7.8 8.1 8.9 11.4    11.8    12.0    10.2
BARROW  AK  68  11.9    11.3    11.3    11.5    12.0    11.5    11.7    12.4    13.2    13.3    12.4    11.7    12.0
BARTER IS.  AK  33  15.1    14.4    13.7    12.0    12.7    11.6    10.9    11.8    13.2    14.8    14.9    13.9    13.2
BETHEL  AK  43  14.5    14.8    13.8    12.9    11.5    11.0    10.7    11.0    11.6    12.3    13.2    13.7    12.6
BETTLES AK  26  5.9 6.3 7.1 7.5 7.2 6.8 6.6 6.2 6.4 6.4 5.8 5.7 6.5

Ich brauche die Varianz für jeden Staat zu berechnen, außer Alaska von AK vertreten. Die Formel für die Varianz ist: n ? (x ^ 2) - (S x ^ 2) / n (n-1).

Alles, was ich habe jetzt einige Code wie

    BEGIN {FS ="\t"} {if ($2 != "AK")
{
        sum1 = sum1 + ($4)^2
        sum2 = sum2 + $4
        n = n+1
        if($2 != "AK")
        {
                sum1 = sum1 * n;
                sum3 = sum1 - (sum2)^2
                sum3 = sum3 / (n*(n-1));
        }


}} END {}

BEGIN {FS ="\t"} {if ($2 != "AK")
{

           sum1 = sum1 * n;
           sum3 = sum1 - (sum2)^2
           sum3 = sum3 / (n*(n-1));

}}

END {print "average " sum3}

i eine Division erhalten durch Null-Fehler

Ich bin an Ideen, wie diese Formel zu berechnen. Irgendwelche Vorschläge auf, brechen Sie den Code unten - Suche nach dem Pattersn und oder vollständige Code wird geschätzt.

War es hilfreich?

Lösung

Dies summiert die Quadrate der Spalte 10, wenn der Zustand AK nicht. Dann verwendet Ihre Formel.

BEGIN {
    FS = "\t";
    n = 0;
}
{
    if($2 != "AK") {
        x[n] = $10 * $10;
        n++;
    }
}

END {
    sum = 0;
    for(i = 0; i < n; i++)
        sum += x[i];
    print (n*sum - sum) / (n * (n-1));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top