A:在一个数据集中筛选同时满足多列按不同条件汇总的子数据集时,
可构建一个由需条件判断的列组成的和原数据集相同长度的零数组,
处理该子数组把满足条件单元格值设为真,获取所有列为真的行,最后在原数组中取满足条件的行的子数据即可。
实现示例
在一个数据集中筛选同时满足:1.净利润前80%;2.市值前50%;3.市盈率后80%;4.涨幅前80%;5.换手率后80% 的子数组
范例代码:
endt:=20240920t;
setsysparam(pn_date(),endt);
//初始化原数组
data:=Query('A股','',true,'',
'代码',DefaultStockID(),
'名称',CurrentStockName(),
'季度净利润',LastQuarterData(NewReportDateOfEndT2(endt),46033),
'市值',StockTotalValue3(),
"市盈率",StockPE(EndT),
"涨幅",stockzf3(),
"换手率",stockhsl3());
//需要条件判段的列
cols:=mcols(data,1)[2:6];
//初始化和原数组相同长度的零数组
arr:=Zeros(mrows(data),cols);
//1.净利润前80%
arr[:,cols[0]]:=data[:,cols[0]].>=PercentValueByField(data,cols[0],0.2);
//2.市值前50%
arr[:,cols[1]]:=data[:,cols[1]].>=PercentValueByField(data,cols[1],0.5);
//3.市盈率后80%
arr[:,cols[2]]:=data[:,cols[2]].>=PercentValueByField(data,cols[2],0.8);
//4.涨幅前80%
arr[:,cols[3]]:=data[:,cols[3]].>=PercentValueByField(data,cols[3],0.2);
//5.换手率后80%
arr[:,cols[4]]:=data[:,cols[4]].<=PercentValueByField(data,cols[4],0.8);
//满足所有条件的行
rows:=sselect thisrowindex from arr where sum(thisrow)=length(cols) end;
//在原数组中取子数组
return data[rows];
相关说明
FAQ:
PercentValueByField
FAQ:
基础算符对矩阵计算的支持