有关子集创建的更多信息您好,我指的是今年 5 月的帖子https://communities.sas.com/message/166376#166376 。
该示例解释了如何通过 1) 首先添加 af 数据过滤器,2) 然后子集化来创建新数据表:
dt = 打开(BigClass);
dt << 数据过滤器(添加过滤器(列(:年龄),其中(:年龄== {12,13}),模式(选择(1)));
子 1 = dt<
结果,创建了一个名为“regions”的数据表。正如预期的那样。
我使用自己的数据集创建了一个类似的示例(BigClass 示例有效!),但它对我来说效果不佳。我怀疑我对某些事情有误解。这是我的程序流程附件。
BigClass 示例和我的示例之间的区别在于,当我运行整个脚本时,不会选择数据过滤器。 (我省略了从 Excel 文件加载文件的操作,以便能够向您发送原始代码,其中包含某些名称)。解释一下:有一个字符列,我想从中仅选择该列中的文本以“d”或“I”开头的那些行。我发现有必要创建一个新列来执行数据过滤。当我总共运行代码时,不会选择行,也不会创建子集数据表。如果我首先运行代码直到创建新列 Onelettet,然后运行数据过滤器,则会创建过滤器并选择行。最后创建子集数据表。但是这些事情应该以脚本运行的方式发生吗?或者?
这是使用脚本的基础,因此我需要深入了解这些微妙之处。
问候
波尔
回复:有关子集创建的更多信息使用MS的示例代码,这是一个非常健壮的直接解决方案,因为它不需要数据表中的行切换到选定状态:
dt = 新表( “测试” ,
添加行( 5 ) ,
新列( “Instr” ,字符,
设置值( { “鼓” , “喇叭” , “七弦琴” , “单簧管” , “迪吉里杜管” } )
)
);
sel = dt << 获取行 where (开头为( : instr , "d" ) |开头为( : instr , "l" ) ) ;
dt << 子集(输出表名( "sel instr" ) ,行( sel ) ,选定列( 0 ) ) ;
回复:有关子集创建的更多信息如果您提供了参考,则关闭数据过滤器很简单。
df = dt << 数据过滤器( ... ) ;
df << 关闭;
回复:有关子集创建的更多信息嗨女士,
添加等待();公式求值解决了执行子集命令之前未设置过滤器的问题。谢谢。
关闭过滤窗口的命令是什么?我不希望它在子集之后保留在屏幕上。我只想要数据集。事实上我根本不需要看到它。
是的,我认为选择可以在一份声明中完成。只是不知道该怎么做。
谢谢
波尔
回复:有关子集创建的更多信息如果没有用于测试代码的表,很难说出为什么它在特定情况下不起作用。如果代码依赖于在同一脚本中创建的列公式,我发现公式计算可能会落后于脚本执行,这可能会导致意外结果。为了避免这种情况,可以尝试在关键步骤插入Wait()或<< eval 公式。
但是在这种特殊情况下,如果我理解正确,则不需要新列(或数据过滤器)。也许下面的例子可以有所帮助。
//示例表
dt = 新表( “测试” ,
添加行( 5 ) ,
新列( “Instr” ,字符,
设置值( { “鼓” , “喇叭” , “七弦琴” , “单簧管” , “迪吉里杜管” } )
)
);
// 使用数据过滤器选择以 d 或 l 开头的指令
sel = dt <<获取行 where (开头为( : instr , "d" ) |开头为( : instr , "l" ) ) ;
dt << 数据过滤器(
添加过滤器(列( : instr ) ,其中( : instr = : instr [ sel ] ) ,模式( select ( 1 ) ) )
);
dt << subset (输出表名( "sel instr" ) ,选定的行( 1 ) ,选定的列( 0 ) ) ;
// 或者更直接的方法,无需数据过滤器
dt <<选择其中(开头为( : instr , "d" ) |开头为( : instr , "l" ) ) ;
dt << subset (输出表名( "sel instr" ) ,选定的行( 1 ) ,选定的列( 0 ) ) ;