/* nag_tabulate_margin (g11bcc) Example Program. * * Copyright 2002 Numerical Algorithms Group. * * Mark 7, 2002. */ #include #include #include #include #include int main(int argc, char *argv[]) { FILE *fpin, *fpout; /* Scalars */ Integer exit_status, i, j, k, maxst, mcells, mdim; Integer ncells, ncol, ndim, nrow; Nag_TableStats stat; /* Arrays */ char nag_enum_arg[40]; double *auxt = 0, *stable = 0, *table = 0; Integer *idim = 0, *isdim = 0, *mlevel = 0; NagError fail; INIT_FAIL(fail); /* Check for command-line IO options */ fpin = nag_example_file_io(argc, argv, "-data", NULL); fpout = nag_example_file_io(argc, argv, "-results", NULL); exit_status = 0; fprintf(fpout, "nag_tabulate_margin (g11bcc) Example Program Results\n"); /* Skip heading in data file */ fscanf(fpin, "%*[^\n] "); fscanf(fpin, "%s%ld%ld%*[^\n] ", nag_enum_arg, &ncells, &ndim); /* nag_enum_name_to_value(x04nac). * Converts NAG enum member name to value */ stat = (Nag_TableStats) nag_enum_name_to_value(nag_enum_arg); maxst = 54; /* Allocate arrays */ if (!(auxt = NAG_ALLOC(maxst, double)) || !(stable = NAG_ALLOC(maxst, double)) || !(table = NAG_ALLOC(ncells, double)) || !(idim = NAG_ALLOC(ndim, Integer)) || !(isdim = NAG_ALLOC(ndim, Integer)) || !(mlevel = NAG_ALLOC(ndim, Integer))) { fprintf(fpout, "Allocation failure\n"); exit_status = -1; goto END; } for (i = 1; i <= ncells; ++i) fscanf(fpin, "%lf", &table[i-1]); fscanf(fpin, "%*[^\n] "); for (j = 1; j <= ndim; ++j) fscanf(fpin, "%ld", &idim[j-1]); fscanf(fpin, "%*[^\n] "); for (j = 1; j <= ndim; ++j) fscanf(fpin, "%ld", &isdim[j-1]); fscanf(fpin, "%*[^\n] "); /* nag_tabulate_margin (g11bcc). * Computes marginal tables for multiway table computed by * nag_tabulate_stats (g11bac) or nag_tabulate_percentile * (g11bbc) */ nag_tabulate_margin(stat, table, ncells, ndim, idim, isdim, stable, maxst, &mcells, &mdim, mlevel, auxt, &fail); if (fail.code != NE_NOERROR) { fprintf(fpout, "Error from nag_tabulate_margin (g11bcc).\n%s\n", fail.message); exit_status = 1; goto END; } fprintf(fpout, "\n"); fprintf(fpout, " Marginal Table\n"); fprintf(fpout, "\n"); ncol = mlevel[mdim-1]; nrow = mcells / ncol; k = 1; for (i = 1; i <= nrow; ++i) { for (j = k; j <= k + ncol - 1; ++j) fprintf(fpout, "%7.2f ", stable[j-1]); fprintf(fpout, "\n"); k += ncol; } END: if (fpin != stdin) fclose(fpin); if (fpout != stdout) fclose(fpout); if (auxt) NAG_FREE(auxt); if (stable) NAG_FREE(stable); if (table) NAG_FREE(table); if (idim) NAG_FREE(idim); if (isdim) NAG_FREE(isdim); if (mlevel) NAG_FREE(mlevel); return exit_status; }