2

データベーステーブルをインポートするプラグインで変数を作成したいと思います。これを行うには、次のコードを使用しています。

SF_macro_save("_vars", "var1 var2...");
SF_macro_save("_types", "type1 type2...");
SF_macro_save("_formats", "format1 format2...");
SF_macro_save("_obs", "obs1 obs2...");

これは変数をうまく作成しますが、変数や値にラベルを付ける方法がわかりません。

ラベルを作成するには、どの C++ 関数を使用する必要がありますか? または、C++ から Stata 関数を呼び出すにはどうすればよいですか? (カウントする場合はVisual Studio 10を使用しています)

プラグインからこの Stata 関数を呼び出したい:

ラベル変数 var1 label1

label define var1_label 1 "label1" 2 "label2" ラベル値 var1 var1_label

ありがとう

4

2 に答える 2

1

これは可能ですが、簡単ではありません。基本的に、コード内に .do ファイルを作成し (以下の C# の例)、.do ファイルを実行します。.do ファイルを実行し、ODBC を使用して結果を SQL Server データベースに格納する例を次に示します。Stat/Transfer で同様のことを実行して、データと変数ラベルをデータベースにロードできます。

            string m_stcmd_valuelabels = Server.MapPath("~/Data/Cmd/Stata/") + m_filename_noex + "_valuelables.do";

            using (StreamWriter m_sw_stcmd_valuelabels = new StreamWriter(m_stcmd_valuelabels, false))
            {

                m_sw_stcmd_valuelabels.WriteLine("clear");
                m_sw_stcmd_valuelabels.WriteLine("set mem 500m");
                m_sw_stcmd_valuelabels.WriteLine("set more off");
                m_sw_stcmd_valuelabels.WriteLine("use  \"" + m_fullpath.Replace(".zip", ".dta") + "\"");
                m_sw_stcmd_valuelabels.WriteLine("valtovar _all, dis");
                m_sw_stcmd_valuelabels.WriteLine("uselabel");
                m_sw_stcmd_valuelabels.WriteLine("ren lname varname");
                m_sw_stcmd_valuelabels.WriteLine("drop trunc");
                m_sw_stcmd_valuelabels.WriteLine("odbc insert, dsn(\"MyData\") table(\"" + m_filename_noex + "_valuelabels\") create " + m_statadsn_conn);
                m_sw_stcmd_valuelabels.WriteLine("exit");
                m_sw_stcmd_valuelabels.WriteLine();
            }

            string str_PathValueLabels = Server.MapPath("~/Data/Stata12/StataMP-64.exe");

            ProcessStartInfo processInfoValueLabels = new ProcessStartInfo("\"" + str_PathValueLabels + "\"");
            processInfoValueLabels.Arguments = " /e do \"" + m_stcmd_valuelabels + "\"";
            processInfoValueLabels.UseShellExecute = false;
            processInfoValueLabels.ErrorDialog = false;

            Process batchProcessValueLabels = new Process();
            batchProcessValueLabels.StartInfo = processInfoValueLabels;
            batchProcessValueLabels.Start();
于 2013-12-06T11:35:16.150 に答える