如何開啟多個表,在記憶體中合併,並算出小計的結果?例如,「c:\1\」路徑中有五個資料文件,看起來像是「Big Class.jmp」結構。
如何在不使用「Concatenate」的情況下,將記憶體中5個檔案的「身高」欄位以「年齡」列的資料進行分類並彙總。
實現效果就如下面的程式碼實現:
dir = "c:\1\";
Fs = Files In Directory( dir );
For( d = 1, d <= 5, d++,
d1 = Open( dir || fs[d] );
If( d == 1,
d2 = d1,
d2 << Concatenate( Data Table( d1 ), Append to first table );
Close( d1, nosave );
);
);
d1 = d2<< Summary(
Group( :age ),
Sum( :height ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
進階統計建模內容組織資料混合與清理Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?嘗試了很多次好像直接添加表名的列比“創建源列”更快
我不知道這是不是真的。
謝謝!
na=dt<<GET name=""></GET>
Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?這是您的問題
- 您可能希望使用“私有”選項開啟資料表,以節省記憶體並增加
dt = open( "$SAMPLE_DATA/Students.jmp", private );
- 文件表示您需要指定「資料表(名稱),資料表(名稱)」。您指定一個變數作為句柄來引用您正在開啟的資料表
dt = Open( "$SAMPLE_DATA/Students.jmp" );
如果你看看 dt 的值是什麼,它的值是 Data Table( "Students" ),所以你不需要指定dt << Concatenate(
Data Table( dt1 ),
Data Table( dt2 )
應指定為dt << Concatenate(
dt1,
dt2,
- 附加到第一個表和建立來源列都不是文字字串,它們只是關鍵短語,只需如此指定即可。
因此,考慮到所有這些,您的程式碼應該是
names default to here( 1 );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dt1 = Open( "$SAMPLE_DATA/Students1.jmp", private );
dt2 = Open( "$SAMPLE_DATA/Students2.jmp", private );
dt << Concatenate(dt1, dt2, Append to first table, create source column);<BR />close( dt1, nosave );<BR />close( dt2, nosave );
Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?</CODE></PRE><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-342280" slang="en-US">Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?</LINGO-SUB><LINGO-BODY id="lingo-body-342280" slang="en-US"><P>謝謝吉姆!<BR />我正在努力寫。</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2020-12-16_08-39-58.png" style="width: 624px;"><span class="lia-inline-image-display-wrapper" image-alt="2020-12-16_08-39-58.png" style="width: 624px;"><img src="https://us.v-cdn.net/6038925/uploads/images/28985i79B63E10207BC03B/2020-12-16_08-39-58.png" role="button" title="2020-12-16_08-39-58.png" alt="2020-12-16_08-39-58.png" /></span></SPAN></P></LINGO-BODY><LINGO-SUB id="lingo-sub-342277" slang="en-US">Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?</LINGO-SUB><LINGO-BODY id="lingo-body-342277" slang="en-US"><OL>
<LI>連接前 60 個<BR /><OL>
<LI>確保指定了「建立來源列」選項</LI>
</OL>
</LI>
<LI>產生統計數據</LI>
<LI>讀入新文件並將其連接到1-60表中</LI>
<LI>使用「來源列」選擇資料表 1 中的所有行</LI>
<LI>產生統計數據</LI>
<LI>重複步驟 3-5,直到讀入並分析所有 100 個文件</LI>
</OL></LINGO-BODY><LINGO-SUB id="lingo-sub-342276" slang="en-US">Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?</LINGO-SUB><LINGO-BODY id="lingo-body-342276" slang="en-US"><P>謝謝吉姆!</P><P> </P><P>如果有 100 個此類文件,請將文件名稱設為「001.JMP-100.JMP」。<BR />依文件名順序一次拼接、排序、總結60個文件,並輸出結果。所以有41個結果。</P><P><BR />第一次Concatenate就是按照上面的方法從001.Jmp-060.JMP檔中得到第一個結果。<BR />對於「002.Jmp-061.JMP」檔案的第二次處理,這次如何更快的加入和匯總呢?</P></LINGO-BODY><LINGO-SUB id="lingo-sub-341933" slang="en-US">Re: 如何開啟多個表,在記憶體中合併,計算出小計結果?</LINGO-SUB><LINGO-BODY id="lingo-body-341933" slang="en-US"><P>這是程式碼的記憶體版本。它不創建任何視覺對象,也不佔用視覺組件的任何內存,並且它使用結果創建 2 個內存項目、1 個列表和 1 個矩陣。</P>
<PRE><CODE class=" language-jsl">names default to here(1);
dt = open("$SAMPLE_DATA/big class.jmp",private);
dt << set name("zippy");
dt2 = open("$SAMPLE_DATA/big class.jmp",private);
dt3 = dt2<< Concatenate( dt,private );
close(dt,nosave);
close(dt2,nosave);
summarize( dt3, bygroup = by(:age), heightSum = sum(:height));
close(dt3,nosave);
show(bygroup,heightSum);