如何打开多个表,在内存中合并,并算出小计的结果?例如,“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);