Хех, судя по вашему листингу, вы записываете в файл 2 введенные с клавиатуры значения переменных s и n, причем совсем без изменения числовых данных

)
Навскидку, ряд грубейших ошибок:
Вы не определили массив, в который будете считывать данные из файла, хотя тип для него прописали.
пишется в разделе переменных, а не до него
type city=record
name:string;
chis:real;
end;
Вы пишете, что численность населения всегда целое число, а определяете переменную для нее вещественной, хотя на рассчеты это не повлияет, скорее уж на форму вывода числа.
Совершенно непонятно, чем вы руководствовались, определяя эти переменные для хранения считанных из файла данных, вы же уже определили свой тип, так создайте массив вашего типа и считывайте данные непосредственно в него.
reset(f);
while not eof(f) do
begin
read(s,n);
end;
Исходя из вышесказанного, использование переменных s и n бессмысленно, тем более так, как вы прописали, то есть в данном цикле вы просто запрашиваете ввод с клавиатуры, так как в команде read(s,n) вы не ссылаетесь на файловую переменную как на источник, следовательно, программа будет считывать данные из стандартного потока ввода, то есть с клавиатуры. Правильнее будет так read(f,s,n), хотя лучше все же использовать массив типа city.
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
write(f2,s,n);
Это явно нужно поместить в другое место, а то вы открываете результирующий файл по перезаписи и вносите в него последние значения переменных s и n, даже не увеличивая числовое значение.
Предлагаю строки
assign(f2,'d:\lab\4\file2.txt');
rewrite(f2);
поместить до цикла, а
в цикл, чтобы данные сразу после чтения передавались во второй файл. Естественно, опять повторюсь, что считывать данные из файла лучше в массив, причем наилучшим вариантом будет динамический массив, то есть с изменяемой размерностью.