Another thought: if the order of lines in the output does not matter it would be simpler.
use strict; use warnings;
my $letters = <DATA>;
my @letters = $letters =~ /\w+/g;
while(<DATA>) {
next if /SampleID/;
chomp;
my @recs = split /\s+/;
my $ctr = 2;
for my $letter (@letters) {
print "$letter\t".(join "\t", @recs[0,1,$ctr++])."\n";
}
}
__DATA__
A C F
SampleID Time ObsConc ObsConc ObsConc
5 24 2.27E+06 687.02 32521.94
5 168 1.92E+06 525.02 22198.44
5 12 2.94E+06 896.39 41331.61
5 -0.5 2.23E+06 942.34 40616.49
5 8 4.03E+06 1371.32 45863.69
6 24 1.02E+06 1057.89 46341.04
6 168 3.14E+06 4987.32 42166.08