Сложность заключается в том, что существует множество возможных путей выборки из-за неизвестных соотношений, таких как количество файлов и количество уникальных кодов, количество кодов в одном файле, количество файлов> 150 дней и распределение количества файлы по коду и т. д. Вместо того, чтобы пытаться разработать окончательное решение для всех возможных случаев, я опишу процесс, который поможет вам найти решение. Каждый шаг имеет множество простых способов сделать это в Excel.
Думайте об этом как о трех горшках:
Пот 1 вы будете заполнять выбранными сэмплами в ходе упражнения (этот банк будет в форме списка, который вы строите с выбранными именами файлов). Мы назовем это списком образцов.
Пот 2 содержит коллекцию уникальных кодов (этот банк будет в форме списка уникальных кодов; посмотрите, как извлечь уникальные значения из списка, содержащего дубликаты, если вы не знаете, как). Он будет содержать коды, которые еще не были представлены выбранным образцом. Мы назовем это списком кодов.
Пот 3 содержит "жетоны" для необходимого количества оставшихся образцов (этот банк будет просто числом в ячейке, против которой вы уменьшаете или подсчитываете при выборе образцов). Мы назовем это подсчетом оставшихся образцов. Рассчитайте большее из 20 или 20% и поместите это число в этот банк.
Вот шаги:
Решите, какой предел передискретизации использовать. Ваша цель - 20% файлов, но случайная выборка не даст вам одинаковых 20% для всех кодов (если только вы не добавите дополнительное требование для этого). У некоторых кодов будет выбрано менее 20%, у некоторых больше. Неслучайные правила не будут иметь отношения к 20%. Коды с одним файлом будут выбраны на 100%. Правило> 150 дней может выбирать более 20% файлов для данного кода. Если вы выберете намного больше 20% по этому правилу, этот код уже будет перепредставлен, так что вы, вероятно, не захотите случайным образом выбирать еще больше из этого кода. Определите максимальный процент выборки (или количество выборок) для правила> 150 дней, после которого вы исключаете этот код из случайной выборки.
Выберите все файлы с днями> 150 и переместите их в список образцов. Уменьшите количество оставшихся сэмплов на количество этих файлов. Удалите коды, представленные этими файлами, из списка кодов (на основе уникальных кодов для этой коллекции файлов).
Если в результате этого шага какие-либо коды превышают предел избыточной выборки, удалите все файлы, связанные с этими кодами, из списка источников. Обратите внимание, что удаление является переносным. Цель состоит в том, чтобы гарантировать, что ни один из этих файлов не будет взят позже. Вы можете закодировать это так, чтобы не требовалось фактически удалять файлы.
Из оставшихся файлов и кодов в списке кодов перейдите к списку примеров любых файлов, где это единственный файл для этого кода. Уменьшите количество оставшихся сэмплов на количество этих файлов. Удалите коды, представленные этими файлами, из списка кодов. Обратите внимание, что этот шаг не является строго необходимым в зависимости от того, как реализован шаг 5. Я выделил это как отдельный шаг для ясности и чтобы вам не нужно было случайным образом выбирать из списка один.
Для каждого оставшегося кода в списке кодов случайным образом выберите один файл для этого кода и переместите его в список образцов. Уменьшите количество оставшихся сэмплов на количество этих файлов. Удалите коды, представленные этими файлами, из списка кодов (удаление кодов может быть необязательным, в зависимости от того, как вы его реализуете; по завершении этого шага список кодов больше не нужен).
Для подсчета количества файлов в оставшихся выборках случайным образом выберите файл из оставшихся файлов и переместите его в список образцов.
И вы сделали.
Разработка этого приложения для вас выходит за рамки предполагаемого вопроса на этом сайте. Есть много способов приблизиться к каждому шагу, и формулы и методы их выполнения хорошо представлены в предыдущих вопросах на сайте. Если вы застряли, задайте новый вопрос для помощи с конкретной проблемой. Например, «Как выбрать случайным образом значение из списка?"будет соответствующий масштаб вопроса.