void set_sample_label (DATASET *dset) { GtkWidget *dlabel; char tmp[256]; int tsubset; if (mdata == NULL) { return; } /* set the sensitivity of various menu items */ time_series_menu_state(dataset_is_time_series(dset)); panel_menu_state(dataset_is_panel(dset)); ts_or_panel_menu_state(dataset_is_time_series(dset) || dataset_is_panel(dset)); flip(mdata->ui, "/menubar/Data/DataTranspose", !dataset_is_panel(dset)); tsubset = dset->t1 > 0 || dset->t2 < dset->n - 1; /* construct label showing summary of dataset/sample info (this goes at the foot of the window) */ if (complex_subsampled() && !tsubset && dataset_is_cross_section(dset)) { sprintf(tmp, _("Undated: Full range n = %d; current sample" " n = %d"), get_full_length_n(), dataset->n); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else if (complex_subsampled() && dataset_is_panel(dset)) { char t1str[OBSLEN], t2str[OBSLEN]; const char *pdstr = get_pd_string(dset); ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); sprintf(tmp, _("%s; sample %s - %s"), _(pdstr), t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else { char t1str[OBSLEN], t2str[OBSLEN]; const char *pdstr = get_pd_string(dset); if (tsubset && calendar_data(dset)) { /* it's too verbose to print both full range and sample */ ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); sprintf(tmp, _("%s; sample %s - %s"), _(pdstr), t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } else { ntodate(t1str, 0, dset); ntodate(t2str, dset->n - 1, dset); sprintf(tmp, _("%s: Full range %s - %s"), _(pdstr), t1str, t2str); if (tsubset) { gchar *fulltext; ntodate(t1str, dset->t1, dset); ntodate(t2str, dset->t2, dset); fulltext = g_strdup_printf(_("%s; sample %s - %s"), tmp, t1str, t2str); gtk_label_set_text(GTK_LABEL(mdata->status), fulltext); g_free(fulltext); } else { gtk_label_set_text(GTK_LABEL(mdata->status), tmp); } } } /* construct label with datafile name (this goes above the data series window) */ dlabel = g_object_get_data(G_OBJECT(mdata->main), "dlabel"); if (dlabel != NULL) { if (strlen(datafile) > 2) { /* data file open already */ const char *p = strrchr(datafile, SLASH); gchar *trfname; if (p != NULL) { trfname = my_filename_to_utf8(p + 1); } else { trfname = my_filename_to_utf8(datafile); } strcpy(tmp, " "); if (data_status & SESSION_DATA) { sprintf(tmp + 1, "Imported %s", trfname); } else if (data_status & MODIFIED_DATA) { sprintf(tmp + 1, "%s *", trfname); } else { sprintf(tmp + 1, "%s", trfname); } gtk_label_set_text(GTK_LABEL(dlabel), tmp); g_free(trfname); } else if (data_status & MODIFIED_DATA) { strcpy(tmp, _(" Unsaved data ")); gtk_label_set_text(GTK_LABEL(dlabel), tmp); } } if (complex_subsampled() || dset->t1 > 0 || dset->t2 < dset->n - 1) { restore_sample_state(TRUE); } console_record_sample(dataset); }
GtkWidget *build_var_popup (void) { const char *items[] = { N_("Display values"), N_("Summary statistics"), N_("Time series plot"), N_("Panel plot..."), N_("Frequency distribution"), N_("Boxplot"), N_("Correlogram"), N_("Periodogram"), N_("Edit attributes"), N_("Edit values"), N_("Copy to clipboard"), N_("Delete"), NULL, N_("Add log"), N_("Add difference"), N_("Define new variable...") }; GtkWidget *menu; GtkWidget *item; int i, n = G_N_ELEMENTS(items); int real_panel = multi_unit_panel_sample(dataset); menu = gtk_menu_new(); for (i=0; i<n; i++) { if (items[i] == NULL) { item = gtk_separator_menu_item_new(); gtk_widget_show(item); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); continue; } if (real_panel && (i == 2 || i == 5)) { /* don't offer regular ts or boxplot */ continue; } if (!real_panel && i == 3) { /* don't offer panel plot */ continue; } if ((i == 6 || i == 7) && !dataset_is_time_series(dataset)) { continue; } if ((i == 2 || i == 14) && !extended_ts(dataset)) { continue; } if (i == 5 && dataset_is_time_series(dataset)) { /* skip boxplot option */ continue; } item = gtk_menu_item_new_with_label(_(items[i])); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(var_popup_click), _(items[i])); gtk_widget_show(item); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); } return menu; }
DATASET *midas_aux_dataset (const int *list, const DATASET *dset, int *err) { DATASET *mset = NULL; gretlopt opt = 0; int mpd, pd = dset->pd; int T, m = list[0]; int yr, mon; int daily = 0; if (m < 3 || gretl_list_has_separator(list)) { *err = E_INVARG; } else if (!dataset_is_time_series(dset)) { *err = E_INVARG; } else if (pd != 1 && pd != 4 && pd != 12) { /* host dataset should be annual, quarterly or monthly */ *err = E_PDWRONG; } if (*err) { return NULL; } if (pd == 1) { /* annual: midas series should be quarterly or monthly */ if (m != 4 && m != 12) { *err = E_INVARG; } else { mpd = m; } } else if (pd == 4) { /* quarterly: midas series should be monthly or daily */ if (m == 3) { mpd = 12; } else if (m == midas_days_per_period(5, 4)) { mpd = 5; } else if (m == midas_days_per_period(6, 4)) { mpd = 6; } else if (m == midas_days_per_period(7, 4)) { mpd = 7; } else { *err = E_INVARG; } } else { /* monthly: midas series should be daily */ if (m == midas_days_per_period(5, 12)) { mpd = 5; } else if (m == midas_days_per_period(6, 12)) { mpd = 6; } else if (m == midas_days_per_period(7, 12)) { mpd = 7; } else { *err = E_INVARG; } } if (*err) { return NULL; } if (!gretl_is_midas_list(list, dset)) { gretl_warnmsg_set("The argument does not seem to be a MIDAS list"); } T = sample_size(dset) * m; if (mpd >= 5 && mpd <= 7) { /* we'll add markers for daily dates */ daily = 1; opt = OPT_M; } mset = create_auxiliary_dataset(1, T, opt); if (mset == NULL) { *err = E_ALLOC; } if (!*err) { char *p, obs[OBSLEN]; int nonex, qtr = 0; int i, t, s, m3 = 0; mset->pd = mpd; mset->structure = TIME_SERIES; strcpy(mset->varname[0], dset->varname[list[1]]); p = strrchr(mset->varname[0], '_'); if (p != NULL) *p = '\0'; ntodate(obs, dset->t1, dset); if (mpd == 4) { sprintf(mset->stobs, "%d:1", atoi(obs)); } else if (mpd == 12) { sprintf(mset->stobs, "%d:01", atoi(obs)); } if (daily && pd == 4) { m3 = m / 3; } /* loop across observations in low-frequency dataset */ s = 0; for (t=dset->t1; t<=dset->t2; t++) { if (daily) { ntodate(obs, t, dset); sscanf(obs, "%d:%d", &yr, &mon); if (pd == 4) { qtr = mon; } } /* read data right-to-left! */ for (i=m; i>0; i--) { int vi = list[i]; if (daily) { if (pd == 4) { mon = quarter_to_month(qtr, m, m-i+1); nonex = daily_index_to_date(mset->S[s], yr, mon, (m-i) % m3, mpd); } else { nonex = daily_index_to_date(mset->S[s], yr, mon, m-i, mpd); } if (nonex) { /* skip any non-existent daily dates */ mset->t2 -= 1; } else { mset->Z[0][s++] = dset->Z[vi][t]; } } else { mset->Z[0][s++] = dset->Z[vi][t]; } } } if (daily) { strcpy(mset->stobs, mset->S[0]); strcpy(mset->endobs, mset->S[mset->t2]); mset->markers = DAILY_DATE_STRINGS; } mset->sd0 = get_date_x(mset->pd, mset->stobs); if (!daily) { ntodate(mset->endobs, mset->t2, mset); } } return mset; }
int stata_export (const char *fname, const int *list, gretlopt opt, const DATASET *dset) { dta_hdr hdr; char buf[96]; char timevar[16]; ssize_t w = 0; guint8 *types; double xit; gint32 i32, t32 = 0; gint16 i16; guint8 i8; int missing; int add_time = 0; int i, j, t, fd; int strvars = 0; int nv = 0; int err = 0; fd = gretl_open(fname, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd < 0) { return E_FOPEN; } types = make_types_array(dset, list, &nv); if (types == NULL) { close(fd); return E_ALLOC; } *timevar = '\0'; if (dataset_is_time_series(dset)) { t32 = get_stata_t0(dset, timevar, &add_time); } dta_hdr_init(&hdr, dset, nv + (add_time > 0)); dta_hdr_write(&hdr, fd, &w); /* typlist nvar byte array varlist 33*nvar char array srtlist 2*(nvar+1) int array fmtlist 12*nvar char array lbllist 33*nvar char array */ /* typlist */ if (add_time) { i8 = STATA_LONG; w += write(fd, &i8, 1); } for (j=0; j<nv; j++) { w += write(fd, &types[j], 1); } /* varlist (names) */ if (add_time) { memset(buf, 0, 33); strcat(buf, timevar); w += write(fd, buf, 33); } for (i=1; i<dset->v; i++) { if (include_var(list, i)) { memset(buf, 0, 33); strcat(buf, dset->varname[i]); w += write(fd, buf, 33); } } /* srtlist */ i16 = 0; if (add_time) { w += write(fd, &i16, 2); } for (j=0; j<=nv; j++) { w += write(fd, &i16, 2); } /* fmtlist */ if (add_time) { memset(buf, 0, 12); sprintf(buf, "%%t%c", *timevar); w += write(fd, buf, 12); } for (j=0; j<nv; j++) { memset(buf, 0, 12); if (types[j] == STATA_BYTE || types[j] == STATA_INT) { strcpy(buf, "%8.0g"); } else if (types[j] == STATA_LONG) { strcpy(buf, "%12.0g"); } else { strcpy(buf, "%9.0g"); } w += write(fd, buf, 12); } /* lbllist */ if (add_time) { memset(buf, 0, 33); w += write(fd, buf, 33); } for (i=1; i<dset->v; i++) { if (include_var(list, i)) { memset(buf, 0, 33); if (is_string_valued(dset, i)) { sprintf(buf, "S%d", i); strvars++; } w += write(fd, buf, 33); } } /* Variable labels */ if (add_time) { memset(buf, 0, 81); make_timevar_label(buf, timevar); w += write(fd, buf, 81); } for (i=1; i<dset->v; i++) { if (include_var(list, i)) { memset(buf, 0, 81); asciify_to_length(buf, series_get_label(dset, i), 80); w += write(fd, buf, 81); } } /* "Expansion fields" (a Stata-private mystery) */ i8 = 0; for (i=0; i<5; i++) { w += write(fd, &i8, 1); } /* Data */ for (t=dset->t1; t<=dset->t2; t++) { if (add_time == TIME_AUTO) { w += write(fd, &t32, 4); t32++; } else if (add_time == TIME_CAL) { t32 = stata_date(t, dset); w += write(fd, &t32, 4); } j = 0; for (i=1; i<dset->v; i++) { if (include_var(list, i)) { xit = dset->Z[i][t]; missing = xna(xit); if (types[j] == STATA_BYTE) { i8 = missing ? STATA_BYTE_NA : xit; w += write(fd, &i8, 1); } else if (types[j] == STATA_INT) { i16 = missing ? STATA_INT_NA : xit; w += write(fd, &i16, 2); } else if (types[j] == STATA_LONG) { i32 = missing ? STATA_LONG_NA : xit; w += write(fd, &i32, 4); } else { xit = missing ? STATA_DOUBLE_NA : xit; w += write(fd, &xit, 8); } j++; } } } /* Value labels */ if (strvars > 0) { for (i=1; i<dset->v; i++) { if (include_var(list, i) && is_string_valued(dset, i)) { dta_value_labels_write(fd, dset, i, &w); } } } close(fd); free(types); fprintf(stderr, "stata_export: wrote %d bytes\n", (int) w); return err; }
int gnumeric_get_data (const char *fname, int *list, char *sheetname, DATASET *dset, gretlopt opt, PRN *prn) { int gui = (opt & OPT_G); wbook gbook; wbook *book = &gbook; wsheet gsheet; wsheet *sheet = &gsheet; int sheetnum = -1; int obscol = 0; DATASET *newset; int err = 0; newset = datainfo_new(); if (newset == NULL) { pputs(prn, _("Out of memory\n")); return 1; } wsheet_init(sheet); gretl_push_c_numeric_locale(); if (wbook_get_info(fname, list, sheetname, book, prn)) { pputs(prn, _("Failed to get workbook info")); err = 1; goto getout; } wbook_print_info(book); if (book->nsheets == 0) { pputs(prn, _("No worksheets found")); err = 1; goto getout; } if (gui) { if (book->nsheets > 1) { wsheet_menu(book, 1); sheetnum = book->selected; } else { wsheet_menu(book, 0); sheetnum = 0; } } else { err = wbook_check_params(book); if (err) { gretl_errmsg_set(_("Invalid argument for worksheet import")); } else if (book->selected >= 0) { sheetnum = book->selected; } else { sheetnum = 0; } } if (book->selected == -1) { /* canceled */ err = -1; } if (!err && sheetnum >= 0) { fprintf(stderr, "Getting data...\n"); err = wsheet_setup(sheet, book, sheetnum); if (!err) { err = wsheet_get_data(fname, sheet, &obscol, prn); if (err) { fprintf(stderr, "wsheet_get_data returned %d\n", err); } else { wsheet_print_info(sheet); book->flags |= sheet->flags; } } } if (err) { goto getout; } else { int r0 = 1; /* the first data row */ int i, j, t; int ts_markers = 0; int merge = (dset->Z != NULL); char **ts_S = NULL; int blank_cols = 0; int missvals = 0; int pd = 0; if (obscol) { book_set_obs_labels(book); if (sheet->text_cols == 0) { sheet->text_cols = 1; } } else if (sheet->text_cols > 0) { /* string-valued variable? */ fprintf(stderr, "Problem: sheet->text_cols = %d\n", sheet->text_cols); } if (sheet->colheads == 0) { book_set_auto_varnames(book); r0 = 0; } if (book_numeric_dates(book)) { fputs("found calendar dates in first imported column\n", stderr); } else if (obscol) { fprintf(stderr, "found label strings in first imported column (text_cols = %d)\n", sheet->text_cols); } else if (sheet->text_cols > 0) { fputs("found string-valued variable in first imported column?\n", stderr); } else { fputs("check for label strings in first imported column: not found\n", stderr); } newset->n = sheet->maxrow - sheet->row_offset; if (!sheet->colheads) { pputs(prn, _("it seems there are no variable names\n")); newset->n += 1; } if (book_numeric_dates(book) || obscol) { pd = importer_dates_check(sheet->label + r0, &book->flags, newset, prn, &err); if (pd > 0) { /* got time-series info from dates/labels */ sheet_time_series_setup(sheet, book, newset, pd); ts_markers = newset->markers; ts_S = newset->S; } else if (!book_numeric_dates(book)) { if (labels_are_index(sheet->label, newset->n)) { /* trash the labels */ book_unset_obs_labels(book); } } } newset->v = sheet->maxcol + 2 - sheet->col_offset - sheet->text_cols; fprintf(stderr, "newset->v = %d, newset->n = %d\n", newset->v, newset->n); /* create import dataset */ err = worksheet_start_dataset(newset); if (err) { goto getout; } if (book_time_series(book)) { newset->markers = ts_markers; newset->S = ts_S; } else { dataset_obs_info_default(newset); } j = 1; for (i=1; i<newset->v; i++) { int s = (sheet->colheads)? 1 : 0; int k = i - 1 + sheet->text_cols; double zkt; if (column_is_blank(sheet, k, newset->n)) { blank_cols++; continue; } if (sheet->colheads && *sheet->varname[k] != '\0') { strcpy(newset->varname[j], sheet->varname[k]); } else { sprintf(newset->varname[j], "v%d", j); } for (t=0; t<newset->n; t++) { zkt = sheet->Z[k][s++]; if (zkt == -999 || zkt == -9999) { newset->Z[j][t] = NADBL; } else { newset->Z[j][t] = zkt; } if (na(newset->Z[j][t])) { missvals = 1; } } j++; } if (blank_cols > 0) { fprintf(stderr, "Dropping %d apparently blank column(s)\n", blank_cols); dataset_drop_last_variables(newset, blank_cols); } if (missvals) { pputs(prn, _("Warning: there were missing values\n")); } if (fix_varname_duplicates(newset)) { pputs(prn, _("warning: some variable names were duplicated\n")); } if (book_obs_labels(book) && wsheet_labels_complete(sheet)) { int offset = (sheet->colheads)? 1 : 0; dataset_allocate_obs_markers(newset); if (newset->S != NULL) { for (t=0; t<newset->n; t++) { strcpy(newset->S[t], sheet->label[t+offset]); } } } if (book->flags & BOOK_DATA_REVERSED) { reverse_data(newset, prn); } if (!err && !dataset_is_time_series(newset) && newset->S != NULL) { /* we didn't time series info above, but it's possible the observation strings carry such info */ import_ts_check(newset); } err = merge_or_replace_data(dset, &newset, opt, prn); if (!err && !merge) { dataset_add_import_info(dset, fname, GRETL_GNUMERIC); } if (!err && gui) { wbook_record_params(book, list); } } getout: wbook_free(book); wsheet_free(sheet); gretl_pop_c_numeric_locale(); if (err && newset != NULL) { destroy_dataset(newset); } return err; }
static int leverage_plot (const MODEL *pmod, gretl_matrix *S, DATASET *dset) { FILE *fp; const double *obs = NULL; int t, err = 0; fp = open_plot_input_file(PLOT_LEVERAGE, 0, &err); if (err) { return err; } if (dataset_is_time_series(dset)) { obs = gretl_plotx(dset, OPT_NONE); if (obs == NULL) { if (fp != NULL) { fclose(fp); } return 1; } } gretl_push_c_numeric_locale(); fputs("set size 1.0,1.0\nset multiplot\nset size 1.0,0.48\n", fp); fputs("set xzeroaxis\n", fp); fputs("set nokey\n", fp); if (obs != NULL) { leverage_x_range(pmod->t1, pmod->t2, obs, fp); } else { fprintf(fp, "set xrange [%g:%g]\n", pmod->t1 + 0.5, pmod->t2 + 1.5); } /* upper plot: leverage factor */ fputs("set origin 0.0,0.50\n", fp); gnuplot_missval_string(fp); fputs("set yrange [0:1]\n", fp); fprintf(fp, "set title '%s'\n", _("leverage")); fputs("plot \\\n'-' using 1:2 w impulses\n", fp); for (t=pmod->t1; t<=pmod->t2; t++) { double h = gretl_matrix_get(S, t - pmod->t1, 0); if (na(h)) { if (obs != NULL) { fprintf(fp, "%g ?\n", obs[t]); } else { fprintf(fp, "%d ?\n", t + 1); } } else { if (obs != NULL) { fprintf(fp, "%g %g\n", obs[t], h); } else { fprintf(fp, "%d %g\n", t + 1, h); } } } fputs("e\n", fp); /* lower plot: influence factor */ fputs("set origin 0.0,0.0\n", fp); gnuplot_missval_string(fp); fputs("set yrange [*:*]\n", fp); fprintf(fp, "set title '%s'\n", _("influence")); fputs("plot \\\n'-' using 1:2 w impulses\n", fp); for (t=pmod->t1; t<=pmod->t2; t++) { double f = gretl_matrix_get(S, t - pmod->t1, 1); if (na(f)) { if (obs != NULL) { fprintf(fp, "%g ?\n", obs[t]); } else { fprintf(fp, "%d ?\n", t + 1); } } else { if (obs != NULL) { fprintf(fp, "%g %g\n", obs[t], f); } else { fprintf(fp, "%d %g\n", t + 1, f); } } } fputs("e\n", fp); fputs("unset multiplot\n", fp); gretl_pop_c_numeric_locale(); return finalize_plot_input_file(fp); }